保存选择查询中的值,然后在更新查询 SQL Server CE 中使用它们

本文关键字:查询 CE Server SQL 选择 保存 然后 更新 | 更新日期: 2023-09-27 17:57:00

我有一个带有SQL Server CE 3.5数据库的Winforms应用程序。我想做一个UPDATE查询,为此我需要一个SELECT查询。

这是我写的:

string command1 = "SELECT Column1, Column2, Column3 FROM Table1";
string command2 = "UPDATE Table2 SET Column2 = @var2, Column3 = @var3 WHERE Column1 = @var1";
using (SqlCeCommand cmd1=new SqlCeCommand(command1, connection))
{
     SqlCeDataReader reader;
     reader = cmd1.ExecuteReader();
     while (reader.Read())
     {
         int var1 = (int)reader[0];
         int var2 = (int)reader[1];
         string var3 = (string)reader[2];
         SqlCeCommand cmd2= new SqlCeCommand (command2, connection);
         cmd2.ExecuteReader();
     }
}

我收到错误

缺少参数。参数序号=3

保存选择查询中的值,然后在更新查询 SQL Server CE 中使用它们

你的第二个命令(command2)中有三个参数 - 但你从不定义这些参数,也不设置任何供它们使用!

试试这个代码:

string command1 = "SELECT Column1, Column2, Column3 FROM Table1";
string command2 = "UPDATE Table2 SET Column2 = @var2, Column3 = @var3 WHERE Column1 = @var1";
using (SqlCeCommand cmd1 = new SqlCeCommand(command1, connection))
{
     // define your "cmd2" here, once, before the loop
     SqlCeCommand cmd2 = new SqlCeCommand (command2, connection);
     // define the parameters
     cmd2.Parameters.Add("@var1", SqlDbType.Int);
     cmd2.Parameters.Add("@var2", SqlDbType.Int);
     cmd2.Parameters.Add("@var3", SqlDbType.VarChar, 100);
     SqlCeDataReader reader = cmd1.ExecuteReader();
     while (reader.Read())
     {
         int var1 = (int)reader[0];
         int var2 = (int)reader[1];
         string var3 = (string)reader[2];
         // set the *values* of the parameters
         cmd2.Parameters["@var1"].Value = var1;
         cmd2.Parameters["@var2"].Value = var2;
         cmd2.Parameters["@var3"].Value = var3;
         cmd2.ExecuteNonQuery();
     }
}

您没有使用 var1、var2 和 var3 变量。我想它们代表第二个查询参数,所以你应该像这样使用它们:

SqlCeParameter param = new SqlCeParameter("@var1", SqlDbType.Int); command.Parameters.Add(param);

请参阅此处的官方文档:https://msdn.microsoft.com/fr-fr/library/system.data.sqlserverce.sqlcecommand.parameters(v=vs.100).aspx