0

SQL Server 2008 の使用を開始したばかりです。アプリケーションからデータベースにデータを挿入する必要がある winforms アプリケーションがあり、一部のテキスト ボックスの値が空になる可能性があります。グーグルで検索した後、何かを見つけましたが、説明します。

DBにレコードを挿入するこのコードを見つけました(接続コードを除く)

stringInsert += "INSERT INTO MyDatabase(dateTime, Name, Surname)";
stringInsert += "VALUES(@Date, @NameString, @SurnameString)";

SqlCommand cmd = new SqlCommand(stringInsert, con);

cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@Date", strTime));
cmd.Parameters.Add(new SqlParameter("@Name", StringName));
cmd.Parameters.Add(new SqlParameter("@Surname", StringSurname));

if (string.IsNullOrEmpty(StringName))
   cmd.Parameters.Add(new SqlParameter("@Name", DBNull.Value.ToString()));
else
   cmd.Parameters.Add(new SqlParameter("@Name", StringName));

しかし、他の誰かがその方法を書いたcmd.Parameters.AddWithValue("@Name" , StringName);

ifStringNameが null または空の場合は設定されるため、自動で if else を実行しますDBNull.Value

今私の質問は次のとおりです。

  1. cmd.Parameters.Add(new SqlParameter("@Name", StringName));stringInsert を StringName に変更する方法がわかりません。「@Name」は文字列の一部にすぎないので、記号「@」は私が知らないことをしているのかもしれません。通常、@"c:\home" のようにエスケープを除外する必要がある場合は、@ 記号を使用します。

  2. が空またはnullでcmd.Parameters.AddWithValue("@Name" , StringName);あっても正しい使用ですか?StringName

  3. これは、WinForm アプリケーションで多くのテキスト ボックスを使用して SQL Server DB にデータを送信する正しい方法ですか?

ありがとう

4

1 に答える 1

2

1) @Name はプレースホルダーです。@Name プレースホルダーを同じ名前付きパラメーターの値に置き換えるように NET Engine に要求しています。(これは、名前付きパラメーターをサポートしていない ADO NET プロバイダーでは異なります)
2) データベースに NULL を挿入する場合は、DBNull.Value を使用する必要があるため、コードはcmd.Parameters.AddWithValue("@Name" , string.IsNullOrEmpty(StringName) ? DBNull.Value : StringName);
3) はい、これが正しい方法です行く。常にパラメーター化されたクエリを使用します。そしてusingステートメント`

于 2012-06-24T16:01:32.307 に答える