问题描述
publicstaticobjectExcSqlScalar(stringsqlstr,paramsobject[]param){//System.Data.OleDb.OleDbCommandtmp=ThisConnect.CreateCommand();System.Data.SqlClient.SqlCommandtmp=ThisConnect.CreateCommand();tmp.CommandText=sqlstr;for(inti=0;i<param.Length;i++)tmp.Parameters.Add("param",param[i]);tmp.Transaction=ThisTrans;objectrtn=tmp.ExecuteScalar();tmp.Dispose();returnrtn;}一个业务类,以前的连接是ACCESS的,现在改成SQL的了.在设计窗体的页面里调用它的代码privatevoidbtnSubmit_Click(objectsender,System.EventArgse){objectpw=BaseDataBase.ExcSqlScalar("select用户名fromlogUserwhere用户名=?and密码=?",this.txtUserName.Text,this.txtOldPwd.Text);if(pw==null){MessageBox.Show("旧密码错误!请再次输入!");this.txtOldPwd.Focus();return;}else{if(this.txtNewPwd1.Text!=this.txtNewPwd2.Text){MessageBox.Show("两次输入的密码不一致!请重新输入!");this.txtNewPwd1.Text="";this.txtNewPwd2.Text="";this.txtNewPwd1.Focus();}else{BaseDataBase.ExcSqlNonQuery("updateLogUserset密码=?where用户名=?",this.txtNewPwd1.Text,this.txtUserName.Text);MessageBox.Show("密码修改成功!");this.Close();}}}像这种写法updateLogUserset密码=?where用户名=?",this.txtNewPwd1.Text,this.txtUserName.Text,用?添加参数,是在连接ACCESS数据库的编码方式,现在连接SQL数据库运行就报错,请问各位怎样能改成SQL的用"@"添加参数方法,
解决方案
解决方案二:
string.Fromat("select用户名fromlogUserwhere用户名={0}and密码={1}",this.txtUserName.Text,this.txtOldPwd.Text)
解决方案三:
stringstr="select用户名fromlogUserwhere用户名=@Nameand密码=@Pwd";SqlParameter[]param=newSqlParameter[2];param[0]=newSqlParameter("@Name",this.txtUserName.Text);param[2]=newSqlParameter("@Pwd",this.txtOldPwd.Text);
解决方案四:
publicstaticobjectExcSqlScalar(stringsqlstr,paramsobject[]param){//System.Data.OleDb.OleDbCommandtmp=ThisConnect.CreateCommand();System.Data.SqlClient.SqlCommandtmp=ThisConnect.CreateCommand();tmp.CommandText=sqlstr;for(inti=0;i<param.Length;i++)tmp.Parameters.Add("param",param[i]);tmp.Transaction=ThisTrans;objectrtn=tmp.ExecuteScalar();tmp.Dispose();returnrtn;}一个业务类,以前的连接是ACCESS的,现在改成SQL的了.在设计窗体的页面里调用它的代码privatevoidbtnSubmit_Click(objectsender,System.EventArgse){objectpw=BaseDataBase.ExcSqlScalar("select用户名fromlogUserwhere用户名=?and密码=?",this.txtUserName.Text,this.txtOldPwd.Text);if(pw==null){MessageBox.Show("旧密码错误!请再次输入!");this.txtOldPwd.Focus();return;}else{if(this.txtNewPwd1.Text!=this.txtNewPwd2.Text){MessageBox.Show("两次输入的密码不一致!请重新输入!");this.txtNewPwd1.Text="";this.txtNewPwd2.Text="";this.txtNewPwd1.Focus();}else{SqlParameter[]param=newSqlParameter[]{newSqlParameter("@pwd",SqlDataType.Varchar),newSqlParameter("@name",SqlDataType.Varchar)};param[0].Value=txtNewPwd1.Text;param[1].Value=this.txtUserName.Text;BaseDataBase.ExcSqlNonQuery("updateLogUserset密码=@pwdwhere用户名=@name",param);MessageBox.Show("密码修改成功!");this.Close();}}}
解决方案五:
晕,该了下面上面没改类似。SqlParameter[]param=newSqlParameter[]{newSqlParameter("@pwd",SqlDataType.Varchar),newSqlParameter("@name",SqlDataType.Varchar)};param[0].Value=txtNewPwd1.Text;param[1].Value=this.txtUserName.Text;BaseDataBase.ExcSqlNonQuery("updateLogUserset密码=@pwdwhere用户名=@name",param);
解决方案六:
原来程序运行修改密码功能,报错如下,程序显示变量名'@param'已声明,变量名在查询批次或存储过程内部必须唯一,'?'附近有语法错误.用第一种做法string.Fromat("select用户名fromlogUserwhere用户名={0}and密码={1}",this.txtUserName.Text,this.txtOldPwd.Text)运行报错为程序显示变量名'@param'已声明,变量名在查询批次或存储过程内部必须唯一,'0附近有语法错误,第2种做法参数名我在ExcSqlScalar里声明了tmp,怎样在窗口代码里给ExcSqlScalar里的tmp添加,而不是在页面里直接添加参数