gpt4 book ai didi

c# - SqlCommand 参数与 String.Format

转载 作者:太空狗 更新时间:2023-10-29 23:58:08 24 4
gpt4 key购买 nike

<分区>

我一直在互联网上搜索,但我似乎找不到任何可以解释我的问题的东西(可能是我没有使用正确的搜索字符串),所以我在这里发帖希望有人可以帮我解决这个问题。 (我的程序是用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,不知道这是否会产生影响。

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