<分区>
我一直在互联网上搜索,但我似乎找不到任何可以解释我的问题的东西(可能是我没有使用正确的搜索字符串),所以我在这里发帖希望有人可以帮我解决这个问题。 (我的程序是用C#写的,使用Visual Studio 2010)
我注意到在 C# 中,有多种构造 SQL 命令的方法。
SqlConnection connection = GetAndOpenConnection(); //function containing connection string and open connection
SqlCommand command = connection.CreateCommand();
到目前为止,我没有问题。我遇到的问题是 CommandText
.我在我的代码中使用了几个不同的命令( SELECT
/INSERT
/UPDATE
/DELETE
),但让我们使用 SELECT
例如。
//Example 1:
command.CommandText = String.Format("SELECT * FROM myTable WHERE name = '{0}'", "bob");
//Example 2:
command.CommandText = "SELECT * FROM myTable WHERE name = @myName";
command.Parameters.Add(new SqlParameter("myName", "bob"));
以上两个例子有什么区别? (性能明智/结构明智/等)
我问的原因是因为在同一个 .cs 文件中,当我使用示例 2 中的方法时,有时代码可以正常工作,有时却不能,然后我最终会像示例 1 中那样制作所有内容,每次都有效。
使用这两种方法是否有显着的 yield /损失?哪种方法更适合完成这样的任务?
附加问题
好的,所以我认为方法 2 是更合适的方法。
但是,如果我使用方法2,就会出现问题。
我有一个循环遍历 List<string> names
.在循环中,当我使用方法 2 并添加名称作为参数时,出现错误提示该参数已存在且无法添加。
我该如何解决这个问题?
List<string> names = new List<string> {"adam", "bob", "john"};
foreach(string name in names)
{
command.CommandText = "SELECT * FROM myTable WHERE name = @myName";
command.Parameters.Add(new SqlParameter("myName", name));
reader = command.ExecuteReader();
while(reader.Read())
{
//loop through each cell and print on the Console
}
}
此外,我知道有人提到在参数中它应该是 "@myName"
而不是 "myName"
.我记得遇到过这个问题,因为我对使用哪种方式感到困惑,不得不对其进行测试。 "@myName"
不适合我,但 "myName"
是的,这就是我现在仍在使用方法 2 的部分代码中的情况。我使用的是 .Net 4.0,不知道这是否会产生影响。