SqlParameterCollection.AddメソッドでSqlDbTypeをすべてNVarCharにする

那由多 40 評価のポイント
2025-02-13T02:13:18.7833333+00:00

C#で作成したプログラムでSQL Serverのテーブルにアクセスし、データの更新や登録を行おうとしています。

クエリをパラメータ化して、SqlParameterCollection.Addメソッドを用いて、SQL文を作成しようと考えています。

このとき、下記の例のように、NameでもAgeでもSqlDbtypeをNVarCharにすると、何か問題はあるのでしょうか。

query ="INSERT INTO [myTable] ([Name],[Age]) VALUES (@Name,@Age)";
using(SqlCommand cmd = new SqlCommand(query, conn)) 
{
  cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar));
  cmd.Parameters.Add(new SqlParameter("@Age", SqlDbType.NVarChar));
  cmd.Parameters["@Name"].Value = "名前";
 cmd.Parameters["@Age"].Value = "28"; 
  cmd.ExecuteNonQuery(); 
}

以下追記

作成しようとしているプログラムでは、対応するフィールドすべてが NVARCHAR 型というわけではありません。

Int型やDateTime2型に挿入する場合もSqlDbtypeをNVarCharにすることで、エラーが発生するといった問題はありますか。

Visual Studio
Visual Studio
Windows、Web、モバイル デバイス用のアプリケーションを構築するための統合開発ツールの Microsoft スイートのファミリ。
116 件の質問
SQL Server
SQL Server
Microsoft リレーショナル データベース管理分析システムのファミリで、電子商取引、基幹業務、データ ウェアハウジングなどのソリューションで使用されています。
47 件の質問
C#
C#
C 言語ファミリをルーツとし、コンポーネント指向プログラミングのサポートを含む、オブジェクト指向およびタイプセーフのプログラミング言語。
41 件の質問
{count} 件の投票

3 件の回答

並べ替え方法: 最も役に立つ
  1. Jiale Xue - MSFT 48,876 評価のポイント Microsoft ベンダー
    2025-02-13T02:43:50.89+00:00

    @那由多, Microsoft Q&A フォーラムへようこそ。

    データベース内の対応するフィールドがすべて NVARCHAR 型である場合、この書き込み方法は問題ありません。

    ただし、データベース内の Age フィールドが実際には数値型 (INT など) である場合は、パラメータ型を NVARCHAR ではなく対応する数値型に設定するのが最善です。 そうしないと、暗黙的な変換の問題やパフォーマンスの問題が発生する可能性があります。

    上記の説明がお役に立てば幸いです。


    回答が正しい解決策である場合は、「回答を受け入れる」をクリックして、賛成票を投じてください。この回答について追加の質問がある場合は、「コメント」をクリックしてください。 注: このスレッドに関連する電子メール通知を受信したい場合は、ドキュメントの手順に従って電子メール通知を有効にしてください。


  2. SurferOnWww 3,796 評価のポイント
    2025-02-13T06:28:31.95+00:00

    このとき、下記の例のように、NameでもAgeでもSqlDbtypeをNVarCharにすると、何か問題はあるのでしょうか。

    どういう事情があるのか分かりませんが、普通はそんなことは考えもしません。

    何か特別な事情がない限り、以下の記事に書いてある通りに、「SQL Server データベース エンジンの型」と「. NET Framework 型」を合わせて、SqlParameter を生成する場合は SqlDbType プロパティを「SqlDbType 列挙」に書いてあるように設定します。

    SQL Server データ型のマッピング

    内部的な類推とか暗黙の型変換でよしなにやってくれるケースもあるかもしれませんが、すべての場合に問題ないかは保証の限りではありません。

    上の紹介したドキュメントに書いてあることが基本です。 基本に外れたことをやってトラブルが出て、その対応に無駄な時間と工数を使うより、最初から基本に忠実にやることをお勧めします。

    0 件のコメント コメントはありません

  3. Deleted

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。

    5 件の削除されたコメント

    コメントはオフになっています。 詳細情報

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。