我需要一个带参数的更新命令,由于某些原因我无法使用存储过程,实际上我们根据数据库,表和列生成更新命令,我们使用以下表格:
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();
Run Code Online (Sandbox Code Playgroud)
但有一个例外:
必须声明标量变量"@Name"
这段代码中的问题在哪里?有没有人对此有所了解?
当您使用System.Data.OleDb数据库提供程序时(无论您使用的是SQL服务器),您需要使用?as作为参数占位符,如:
"UPDATE [Student] SET Name = ? Where Id = ?";
Run Code Online (Sandbox Code Playgroud)
通过使用System.Data.OleDb提供程序,参数的名称不再重要,但您需要确保参数的出现与参数对象添加到命令对象参数集合的顺序相匹配.
编辑:如果你想保持@as参数占位符,你可以改变这个:
DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
Run Code Online (Sandbox Code Playgroud)
至
DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11007 次 |
| 最近记录: |