写个查询用到了下面的sql代码段如果将下面段落中的this.comboBox1cx考试名称.SelectedValue.ToString().Trim()直接改为对应的字符串 执行结果正常 但是如果用this.comboBox1cx考试名称.SelectedValue.ToString().Trim()则提示SQL异常 ")"附近有错误
求解 谢谢 在线等string sqlstr = "";
sqlstr = "declare @s varchar(8000) select @s=ISNULL(@s+',','')+QUOTENAME(考试科目) from 考试科目管理 where 考试编号='" + this.comboBox1cx考试名称.SelectedValue.ToString().Trim() + "' exec('select * from (select 学号,姓名,所属教学区,年级,班级,考试成绩表.授课教师,考试成绩表.考试名称,考试成绩表.科目名称,考试成绩 from 考试成绩表 join 考试科目管理 on 考试成绩表.科目名称=考试科目管理.考试科目 ) a pivot(max(考试成绩) for 科目名称 in('+@s+'))b')";
//MessageBox.Show(sqlstr);
using (SqlConnection conn = new SqlConnection(KDSoft.DBUtility.PubConstant.ConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sqlstr, conn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
if (dt.Rows.Count > 0)
{
this.dataGridView添加.DataSource = dt;
} }
求解 谢谢 在线等string sqlstr = "";
sqlstr = "declare @s varchar(8000) select @s=ISNULL(@s+',','')+QUOTENAME(考试科目) from 考试科目管理 where 考试编号='" + this.comboBox1cx考试名称.SelectedValue.ToString().Trim() + "' exec('select * from (select 学号,姓名,所属教学区,年级,班级,考试成绩表.授课教师,考试成绩表.考试名称,考试成绩表.科目名称,考试成绩 from 考试成绩表 join 考试科目管理 on 考试成绩表.科目名称=考试科目管理.考试科目 ) a pivot(max(考试成绩) for 科目名称 in('+@s+'))b')";
//MessageBox.Show(sqlstr);
using (SqlConnection conn = new SqlConnection(KDSoft.DBUtility.PubConstant.ConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sqlstr, conn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
if (dt.Rows.Count > 0)
{
this.dataGridView添加.DataSource = dt;
} }
当你把中文放在英文字串之后是有机率出现这样的错误,你可以debug出错的情况确认。
把comboBox1cx考试名称==》改为 ”考试名称comboBox1cx“,或者不要中文就可以了
那样你这样的问题很容易就解决了啊
public class deptdata
{
public deptdata()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
DataBase data = new DataBase(); #region 查询--待处理数据表信息
/// <summary>
/// 得到--待处理数据表信息
/// </summary>
/// <param name="tbName"></param>
/// <returns></returns>
public DataSet GetAllDataByTablename(string tbName)
{
return (data.RunProcReturn("select * from " + tbName + "", tbName));
}
#endregion
#region
//其他的查询语句
#endregion
}然后你再引用这个类的CS文件里就可以这样了:string tbName=xyz中文.text.trim();然后tbName做参数传递给GetAllDataByTablename(string tbName)。这样保证你用中文控件ID也不会出错了。
sqlstr = "declare @s varchar(8000) select @s=ISNULL(@s+',','')+QUOTENAME(考试科目) from 考试科目管理 where 考试编号='" + this.comboBox1cx考试名称.SelectedValue.ToString().Trim() + "' exec('select * from (select 学号,姓名,所属教学区,年级,班级,考试成绩表.授课教师,考试成绩表.考试名称,考试成绩表.科目名称,考试成绩 from 考试成绩表 join 考试科目管理 on 考试成绩表.科目名称=考试科目管理.考试科目 ) a pivot(max(考试成绩) for 科目名称 in('''+@s+'''))b')";楼主在执行时,可断点调试一下这句SQL,拿到查询分析器中执行一下就知道了
字符串在动态SQL中 IN('''+@S+''')这样才正确