私は自分のデータベースと同じようにSQLでパラメータを使用しようとしています。パラメータを使用せずに想像できるように、誰かが "O'Brien"という姓を持っています。パラメタリゼーションされたクエリを使用していたはずですが、私はSQLを適切に使いこなすのがとても新しく、それを適切に行う方法を学ぶ時間がなかったので、私は今度は文字列クエリを使用しています私のコードは次のようになります: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がすでに宣言されていることがわかります。私は何が起こっているのか分からない。どんな助けもありがとう。
commandtextステートメントの下にあるパラメータステートメントを移動する – BugFinder
私は 'using'と' foreach'ループの順序を変えるべきだと思うので、foreachループの中で使うことをラップしてください。 – nozzleman
まだありません私はそれをした後に働いています –