0

単純なselectクエリがありますが、実行するとエラーが発生します。

データ型textとvarcharはequalto演算子で互換性がありません

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

string query = String.Format("Select SupplierId from tbl_Supplier where SupplierName ='" + cmbSupplierName.Text +"'");

SqlCommand cmd = new SqlCommand(query, connection);
SqlDataReader sdr = cmd.ExecuteReader();

while (sdr.Read())
{
   MessageBox.Show(sdr["SupplierId"].ToString());
}

のデータ型SupplierNameTEXTデータベースにあります。なぜエラーが発生するのかわかりませんvarchar

4

2 に答える 2

4

多分私は何かが欠けていますが、最初のものは:

  1. 使用する前に接続を開いてください

それとは別に、

  • SQLインジェクションを回避するためにパラメータを使用する
  • using-statement接続とコマンド(実装するものすべて)を破棄/閉じるために使用しますIDispoable)
  • 最大長が8000文字未満VARCHARの場合は、の代わりに使用します。それ以外の場合は、の代わりに使用する(またはにキャストする)必要があります。TEXTLIKE=VARCHAR

「比較演算子は、2つの式が同じかどうかをテストします。比較演算子は、text、ntext、またはimageデータ型の式を除くすべての式で使用できます。次の表に、Transact-SQL比較演算子を示します。」

http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41/

于 2012-06-07T09:40:23.227 に答える
2

SupplierNameが実際にテキストフィールドである場合は、次を試してください。

cast(SupplierName as varchar(max)) = '...'

テキストは古くて廃止された列タイプです。昔は、8000文字以上、。以上が含まれていましたvarchar。SQL Server 2005以降、その役割は。によってより適切に満たされvarchar(max)ます。

8000文字以上の名前を持つ素晴らしいサプライヤーになるでしょう。

于 2012-06-07T09:41:11.507 に答える