0

このコードは完全に正常に機能していましたが、今日実行しようとしましたが、次の例外に直面しています:

私はこのSQLエラーがあります:

例外の詳細: System.Data.SqlClient.SqlException: データ型 text と nvarchar は equal to 演算子で互換性がありません。

私のコードは次のとおりです。

  protected Boolean is_valid(string a, string b) {

   SqlConnection connection = getConnection();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = connection;

    cmd.CommandText = ("SELECT [Email_id] FROM [logintable] WHERE [Email_id] = @a AND [Password]=@b ");



    cmd.Parameters.Add("a", SqlDbType.NVarChar).Value = a;
    cmd.Parameters.Add("b", SqlDbType.NVarChar).Value = b;




    object obj = cmd.ExecuteScalar();
    connection.Close();
       ...
     }`

私のDBフィールドのタイプはnvarchar(50). logintable単なる単純なテーブルです。VSでSQL Expressを使用しています。データ型が nvarchar(50) の 3 つの列があります。ヌルを許可しません。

nvarchar(50)db のデータ型を に変更して、このエラーを解決しようとしましたnvarchar(MAX)。しかし、違いはありませんでした。

また、次のようにクエリを記述しようとしました。

cmd.CommandText = ("SELECT [Email_id] FROM [logintable] WHERE Email_id like @a AND Password like @b ");

しかし、それは解決したり、違いを生んだりしませんでした.助けてください? 前もって感謝します。

4

1 に答える 1

0

「a」および「b」入力変数の長さが 4000 文字未満であることを確認してください。4000 文字を超える変数は、ado.net ドライバーによって自動的にテキスト変数に変換されます。

コードを次のように変更してみてください。

protected Boolean is_valid(string a, string b) {

    if (string.IsNullOrEmpty(a) || a.Length > 50) {
        throw new ArgumentException("a is invalid");
    }

    if (string.IsNullOrEmpty(b) || b.Length > 50) {
        throw new ArgumentException("b is invalid");
    }

    // Do Work

}
于 2013-05-22T14:48:24.657 に答える