4

ソフトウェア開発コースの入門用に、スポーツ クラブ管理システムを作成しています。バックエンドで SQL Server を使用しています。メンバーを追加し、メンバーを更新します。

C# では datetimepicker を使用しましたが、新しいメンバーの追加には問題なく機能します。選択した正確な日付が表示されます。ただし、メンバー情報を更新したい場合nvarchar、SQL Server テーブルのどこにも使用していないのに、「nvarchar 付近の入力が間違っています」などの奇妙なエラーが発生します。

これが私のコードです。誰かが私が間違っている場所を教えてもらえますか。

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 に答える