c#必须声明标量变量" @ Kundenname"

时间:2016-04-27 11:44:35

标签: c# sql-server datagridview

我正在努力为我们的小公司准备一个小工具。

这应该将数据从DataGridView填充到SQL Server Standard数据库中。 读出SQL表工作正常,但我无法使用该工具编写值。

我收到了标题中提到的错误。

这里是代码:

var kdNummer = new SqlParameter("Kundennummer", SqlDbType.Int);
var kdName = new SqlParameter("Kundenname", SqlDbType.VarChar);
var kdMail = new SqlParameter("Kundenmail", SqlDbType.VarChar);
var kdTele = new SqlParameter("Telefon", SqlDbType.VarChar);

string kdquery = "INSERT INTO Kunden VALUES (@Kundennummer, @Kundenname, @Kundenmail, @Telefon)";

using (SqlConnection updatedb = new SqlConnection("Data Source=;Initial Catalog=updatedb;User ID=;Password="))
{
    updatedb.Open();

    for (int i = 0;i<dataGridView1.Rows.Count;i++)
    {
        using(SqlCommand NrDaten = new SqlCommand(kdquery, updatedb))
        {
            kdNummer.Value = dataGridView1.Rows[i].Cells["Kundennummer"].Value;                     
            NrDaten.Parameters.Add(kdNummer);

            NrDaten.ExecuteNonQuery();
        }

        using (SqlCommand NameDaten = new SqlCommand(kdquery, updatedb))
        {
            kdName.Value = dataGridView1.Rows[i].Cells["Kundenname"].Value;
            NameDaten.Parameters.Add(kdName);

            NameDaten.ExecuteNonQuery();
        }

        using (SqlCommand MailDaten = new SqlCommand(kdquery, updatedb))
        {
            kdMail.Value = dataGridView1.Rows[i].Cells["Kundenmail"].Value;
            MailDaten.Parameters.Add(kdMail);

            MailDaten.ExecuteNonQuery();
        }

        using (SqlCommand TeleDaten = new SqlCommand(kdquery, updatedb))
        {
            kdTele.Value = dataGridView1.Rows[i].Cells["Telefon"].Value;
            TeleDaten.Parameters.Add(kdTele);

            TeleDaten.ExecuteNonQuery();
        }
    }

    updatedb.Close();
}

1 个答案:

答案 0 :(得分:1)

您的查询需要4个参数,但您始终只设置一个参数(另请注意,在unittest.mock中您还需要设置import socket import utils class TCPSocket: def __init__(self): self.buf = '' def __enter__(self): pass def __exit__(self, exc_type, exc_val, exc_tb): self.close() def connect(self, host, port): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((host, port)) def close(self): self.sock.close() def send(self, data): self.sock.send(data) def sendall(self, data): self.sock.sendall(data) # For best match with hardware and network realities, # the value of limit should be a relatively small power of 2, for example, 4096 def recv_some(self, limit=4096): return self.sock.recv(limit) def recv_bytes(self, count): while len(self.buf) < count: self.buf += self.recv_some() parts = utils.split_first_n(self.buf, count) self.buf = parts[1] return parts[0] def recv_until(self, delim): while delim not in self.buf: self.buf += self.recv_some() parts = self.buf.split(delim, maxsplit=1) self.buf = parts[1] return parts[0] 符号)。因此,您会收到有关缺少参数的错误。您的代码应该如下所示:

SqlParameter

甚至更短:

@

编辑:我修改了代码的长版本以最大限度地重用实例。否则,您会收到评论中提到的错误。