C# 将参数添加到dbc命令时出现异常
我需要一个带参数的update命令,由于某些原因我不能使用存储过程,实际上我们生成的update命令依赖于数据库、表和列,我们使用以下形式:C# 将参数添加到dbc命令时出现异常,c#,sql,ado.net,C#,Sql,Ado.net,我需要一个带参数的update命令,由于某些原因我不能使用存储过程,实际上我们生成的update命令依赖于数据库、表和列,我们使用以下形式: string conStr = "Provider=SQLNCLI10;Server=.\\sql2008;DataBase=MyDataBase;Trusted_Connection=true;"; DbProviderFactory dbFactory = DbProviderFactories.GetFactory(
string conStr = "Provider=SQLNCLI10;Server=.\\sql2008;DataBase=MyDataBase;Trusted_Connection=true;";
DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
DbConnection dbConnection = dbFactory.CreateConnection();
dbConnection.ConnectionString = conStr;
DbCommand dbCommand = dbFactory.CreateCommand();
dbCommand.CommandText = "UPDATE [Student] SET Name = @Name Where Id = @Id";
DbParameter param1 = dbCommand.CreateParameter();
param1.ParameterName = "@Name";
param1.Value = "LOL";
DbParameter param2 = dbCommand.CreateParameter();
param2.ParameterName = "@Id";
param2.Value = 5;
dbCommand.Parameters.Add(param1);
dbCommand.Parameters.Add(param2);
dbConnection.Open();
dbCommand.ExecuteNonQuery();
dbConnection.Close();
但有一个例外:
必须声明标量变量“@Name”
此代码中的问题在哪里?有人对此有想法吗?当您使用
System.Data.OleDb
作为数据库提供程序(无论您使用的是sql server)时,您需要使用?
作为参数占位符,如:
"UPDATE [Student] SET Name = ? Where Id = ?";
通过使用System.Data.OleDb
提供程序,参数的名称不再重要,但您需要确保参数的出现顺序与parameterobjects添加到command objects参数集合的顺序相匹配
编辑:
如果要将@
保留为参数占位符,只需更改以下内容:
DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
到
试试看,让我知道它是否有效
DbParameter param1 = dbCommand.CreateParameter();
param1.ParameterName.AddWithValue("@Name", Textbox1.Text);
或
调用存储过程时硬编码参数
。
这解决了我的问题。您在哪一点将命令与连接相关联?是工厂做的吗?还有,在哪一行出现异常?@Nilesh给我这个答案,但是
Odbc
命令如何,它是否像Oledb
一样工作?这是我试图回答的问题,但帖子突然回到了原始状态,没有任何评论或答案@Nilesh答案已被所有者删除,我很幸运看到您的链接我找到了它:
DbParameter param1 = dbCommand.CreateParameter();
param1.ParameterName.AddWithValue("@Name", Textbox1.Text);
DbParameter param1 = dbCommand.CreateParameter();
param1.SelectCommand.Parameters.AddWithValue("@Name", Textbox1.Text);
command.CommandText = "EXEC [dbo].[PR_GetPurchase_ProjectBUDetails] " + prjID.ToString()+ " ," + empID.ToString();