4

我正在为我的软件开发课程介绍制作一个体育俱乐部管理系统。我在后端使用 SQL Server。我添加了一个成员并更新了一个成员。

在 C# 中,我使用了 datetimepicker,它可以很好地添加新成员。它给出了选择的确切日期。但是,当我想更新成员信息时,它会给出一些奇怪的错误,例如“nvarchar 附近的输入错误”,而我什至没有nvarchar在 SQL Server 表中的任何地方使用过。

这是我的代码。谁能告诉我哪里错了。

string connectionstring = "Server=Momal-PC\\MOMAL;Database=Project;Trusted_Connection=True;";

SqlConnection conn = new SqlConnection();
conn.ConnectionString = connectionstring;
conn.Open();

string sql = "UPDATE Members SET Type = '" + comboBox1.Text + "' , FirstName = '" + FNTxt.Text + "', Address = '" + ATxt.Text + "' , [D.O.B] = '" + dateTimePicker1.Value + "' Where Number  = '" + comboBox1.Text + "'";

SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;

cmd.Parameters.Add(new SqlParameter("@Type", comboBox1.Text));
cmd.Parameters.Add(new SqlParameter("@FirstName", FNTxt.Text));
cmd.Parameters.Add(new SqlParameter("@Address", ATxt.Text));
cmd.Parameters.Add(new SqlParameter("@[D.O.B]", dateTimePicker1.Value));

int rowsInserted = cmd.ExecuteNonQuery();
MessageBox.Show("Done!");

conn.Close();
4

1 回答 1

6

首先,您需要按如下方式更正您的代码,以便使用参数。其次,您能告诉我们[DOB]字段的类型吗?

string connectionstring = "Server=Momal-PC\\MOMAL;Database=Project;Trusted_Connection=True;";
using(SqlConnection conn = new SqlConnection(connectionstring ))
{
    conn.Open();

    string sql = "UPDATE Members SET Type = @Type , FirstName = @FirstName, Address = @Address , [D.O.B] = @[D.O.B] Where Number  = '" + comboBox1.Text + "'";


    using(SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = sql;

        cmd.Parameters.Add(new SqlParameter("@Type", comboBox1.Text));
        cmd.Parameters.Add(new SqlParameter("@FirstName", FNTxt.Text));
        cmd.Parameters.Add(new SqlParameter("@Address", ATxt.Text));
        cmd.Parameters.Add(new SqlParameter("@[D.O.B]", SqlDbType.DateTime));
        cmd.Parameters["@[D.O.B]"].Value = dateTimePicker1.Value;

        int rowsInserted = cmd.ExecuteNonQuery();
        MessageBox.Show("Done!");
    }
   conn.Close()
}

编辑:

要使用存储过程,首先创建一个:

在此处输入图像描述

然后添加/复制/粘贴参数和 UPDATE 命令并按 F5 以“执行”命令并创建存储过程:

CREATE PROCEDURE UpdateMemberByID
@MemberID int,
@Type varchar(MAX),
@FirstName varchar(MAX),
@Address varchar(MAX),
@DOB smalldatetime
AS
BEGIN
SET NOCOUNT ON;
UPDATE Members SET 
[Type] = @Type
[FirstName] = @FirstName,
[Address] = @Address,
[DOB] = @DOB 
WHERE Number  = @MemberID
END
GO

最后改变这个:

    cmd.CommandType = CommandType.Text;

到:

    cmd.CommandType = CommandType.StoredPrcedure;
于 2013-04-21T04:41:23.423 回答