gpt4 book ai didi

c# - SQL 参数已经声明

转载 作者:太空狗 更新时间:2023-10-30 00:18:13 25 4
gpt4 key购买 nike

所以我尝试在 SQL 中使用参数,因为在我的数据库中有人姓“O'Brien”,正如你可以想象的那样,如果不使用参数,这让我很痛苦,在你开始对我尖叫之前告诉我我应该已经在使用参数化查询了,我对正确使用 SQL 还很陌生,还没有时间学习如何正确使用它,所以我暂时一直在使用字符串查询,我的代码如下:

//string constr = ConfigurationManager.ConnectionStrings["EBSLIVE"].ConnectionString;
string constr = ConfigurationManager.ConnectionStrings["EBSTEST"].ConnectionString;
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(constr))
{
using(SqlCommand cmd = new SqlCommand())
{
foreach (string name in StringNames)
{
string[] StuName = name.Split('|');
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select MOBILE_PHONE_NUMBER as Number From people Where FORENAME = @FORENAME and SURNAME = @SURNAME and PERSON_CODE = @PERSONCODE";

cmd.Parameters.AddWithValue("@PERSONCODE", StuName[0]);
cmd.Parameters.AddWithValue("@FORENAME", StuName[1]);
cmd.Parameters.AddWithValue("@SURNAME", StuName[2]);
cmd.CommandType = CommandType.Text;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable ndt = new DataTable();
sda.Fill(ndt);
dt.Merge(ndt);
}
}
}
}
}
Numbers.AddRange(dt.Rows.OfType<DataRow>().Select(dr => dr.Field<string>("Number")).ToList());

但出于某种原因,它告诉我@PERSONCODE 已经声明。我不知道发生了什么事。任何帮助将不胜感激。

最佳答案

您对不同的 DataAdapters 使用相同的 SqlCommand,但您是在循环中创建和添加参数,因此 SqlCommand 得到具有相同名称的多个参数。这当然是不允许的。

您不需要 SqlCommand,但您每次都可以重复使用 DataAdapter.SelectCommand。我不会使用 AddWithValue:

using (SqlConnection con = new SqlConnection(constr))
using (SqlDataAdapter da = new SqlDataAdapter("Select MOBILE_PHONE_NUMBER as Number From people Where FORENAME = @FORENAME and SURNAME = @SURNAME and PERSON_CODE = @PERSONCODE", con))
{
var cmd = da.SelectCommand;
cmd.Parameters.Add("@PERSONCODE", SqlDbType.NVarChar);
cmd.Parameters.Add("@FORENAME", SqlDbType.NVarChar);
cmd.Parameters.Add("@SURNAME", SqlDbType.NVarChar);

foreach (string name in StringNames)
{
string[] StuName = name.Split('|');
cmd.Parameters["@PERSONCODE"].Value = StuName[0];
cmd.Parameters["@FORENAME"].Value = StuName[1];
cmd.Parameters["@SURNAME"].Value = StuName[2];

DataTable ndt = new DataTable();
da.Fill(ndt);
dt.Merge(ndt);
}
}

关于c# - SQL 参数已经声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973797/

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