c# - Prepare() 方法的正确位置是什么?在定义参数(及其类型和大小)之前还是之后?
问题描述
我发现了两种不同的描述,说明何时应使用准备好的 SQL 语句的 Prepare() 方法。
在 SqlCommand 的文档中(https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.prepare?redirectedfrom=MSDN&view=netframework-4.7.2#System_Data_SqlClient_SqlCommand_Prepare)
“在调用 Prepare 之前,请在要准备的语句中指定每个参数的数据类型。对于每个具有可变长度数据类型的参数,必须将 Size 属性设置为所需的最大大小。如果出现这些情况,Prepare 会返回错误不满足。”
在 MySqlCommand 的文档中(https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html):
“输入你的语句后,调用MySqlCommand对象的Prepare方法。语句准备好后,为查询中的每个动态元素添加参数。”
这两个文件是否相互排斥?究竟应该在哪里使用 Prepare()?在定义参数的数据和类型之后使用 Prepare() 似乎更合乎逻辑。
var conn = new MySql.Data.MySqlClient.MySqlConnection();
var cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = strConnection;
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
cmd.Prepare(); // should it be here?
cmd.Parameters.AddWithValue("@number", 1);
cmd.Parameters.AddWithValue("@text", "One");
cmd.Prepare(); // or here?
for (int i=1; i <= 1000; i++)
{
cmd.Parameters["@number"].Value = i;
cmd.Parameters["@text"].Value = "A string value";
cmd.ExecuteNonQuery();
}
或者也许我不应该比较这两个文档,并且 MySqlCommand 根据 MySql 的 dosc 使用它,而 SqlCommand 根据 Microsoft 的文档使用它?
解决方案
推荐阅读
- java - 使用 Recusion 进行二分搜索
- sql - 为 T-SQL SELECT 语句中的列组合动态生成唯一主键
- sql-server - IDENT_CURRENT 的基础数据存储在哪里?
- list - E: 列表文件 /etc/apt/sources.list.d/docker.list (URI parse) 中的条目 1 格式错误,E: 无法读取源列表
- javascript - 如何捕获点击加拖动事件
- python - AttributeError:“str”对象没有属性“add_child”
- python-3.x - 使用日期值重塑/透视数据
- javascript - 为什么我的 javascript 在服务器上不起作用
- javascript - 将 Vue.js 用于嵌入式内容是否安全?
- javascript - 使用“for-in”访问对象内部的对象?