gpt4 book ai didi

c# - 将参数添加到 DbCommand 时出现异常

转载 作者:太空狗 更新时间:2023-10-29 21:39:52 27 4
gpt4 key购买 nike

我需要一个带参数的更新命令,由于某些原因我不能使用存储过程,实际上我们生成更新命令依赖于数据库、表和列,我们使用以下形式:

        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();

但是有一个异常(exception):

Must declare the scalar variable "@Name"

这段代码的问题在哪里?有人对此有想法吗?

最佳答案

因为您使用 System.Data.OleDb 作为数据库提供程序(无论您使用的是 sql server ),您需要使用 ? 作为参数占位符,例如:

"UPDATE [Student] SET Name = ? Where Id = ?";

通过使用 System.Data.OleDb 提供程序,参数的名称不再重要,但您需要确保参数的出现与将参数对象添加到命令的顺序相匹配对象参数集合。

编辑:如果你想保留 @ 作为参数占位符,你可以改变这个:

DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb");

DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");

关于c# - 将参数添加到 DbCommand 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com