- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要一个带参数的更新命令,由于某些原因我不能使用存储过程,实际上我们生成更新命令依赖于数据库、表和列,我们使用以下形式:
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/
如何将 DbCommand 参数复制到另一个 DbCommand,我想要一个新的 DbCommand,其参数与我上一个 DbCommand 相同。但是现在使用不同的 sql 字符串。 最佳答案 //
我有一个文件集合,对于每个文件,我将在事务中使用 Dbcommand 调用一个 SP。 例如: DbCommand insert = db.GetStoredProcCommand("Insert
您好,我正在尝试为应该在 Visual Studio 2013 中使用的 DbCommand 对象创建自定义可视化工具。 我有以下代码 using VisualizerTest; using Micr
我们使用 Enterprise Library 3.0 访问 Oracle DB(Microsoft Oracle 客户端)。如果在调用存储过程或函数后不释放 DbCommand 实例,会发生什么情况
我正在开发一个使用 ASP.NET Core 2.1 和 EF Core 2.1 的项目。虽然大部分查询和命令使用EF,但有些单元需要直接调用存储过程。 我不能使用FromSql,因为它需要基于实体模
我似乎有两个选择: 让我的类(class)实现IDisposable .创建我的DbCommand实例为 private readonly字段,并在构造函数中添加它们使用的参数。每当我想写入数据库时
我想创建一个新的 DbCommand,但出现了一些错误: DbCommand insertcommand = new DbCommand("insert into persons(firstname,
我想创建一个新的 DbCommand,但出现了一些错误: DbCommand insertcommand = new DbCommand("insert into persons(firstname,
我在一些生成代码分析警告的遗留代码中看到了这一点: Database db = DatabaseFactory.CreateDatabase(strDBCon); DbCommand dbCo
在我试图理解的软件中,DataReader 类是通过 ExecuteReader() 从 IDbCommand 类型(继承的)接收的。 我对 C# 和数据库通信还很陌生,所以:DataReader 如
我有一个参数添加函数,如下所示: public static void AddParameter(DbCommand comm, string ParamName, Object objValue,
我正在尝试拦截所有 SQL 命令并将其记录到数据库中。我还需要参数及其值。但是 command.Parameters 没有 IEnumerable。我可以使用 for-statement,但感觉有点像
我有以下代码尝试从两个不同的表中获取记录,然后将它们添加到特定的组合框中。只有第一个查询有效,第二个查询被忽略。 Try sqlConn = New MySqlConnecti
我不明白为什么每次需要调用存储过程时都必须创建一个 DbCommand 对象。所以我试图想出一种方法来做到这一点。我已经测试了我的代码(见下文)。但我想与社区核实一下,以防我遗漏了什么。我会在 ASP
我需要一个带参数的更新命令,由于某些原因我不能使用存储过程,实际上我们生成更新命令依赖于数据库、表和列,我们使用以下形式: string conStr = "Provider=SQLN
我正在构建一个 sqlwrapper 来处理 MSsql 和 Sqlite,到目前为止,我使用通用 dbconnection、数据集和 dataadapter 没有问题,但是使用 dbcommand
如果我已经使用 ,我有以下 ado.net 代码使用 要包装我的 DBCommand,我是否必须明确关闭下面的连接? 谢谢, public static void ExecuteSQL(
我正在使用 DbCommand 来自:System.ComponentModel.Component 我正在构建一个带有参数的对象: DbCommand command = _webERPDB.Get
您好,我在使用 Devart 时遇到过这种异常情况。我在 MySql 中调用存储过程。存储过程函数,如果我通过数据库调用它。 using (dc = conn.GetContext())
我们有一个超过 13 年历史的 SQL 帮助程序库,所有应用程序都在使用它。我想更新它以使用 Enterprise Library DAAB。这样做的一个障碍是难以将 SqlCommand(由库和所有
我是一名优秀的程序员,十分优秀!