2

メッセージデータベースからメッセージの本文を選択するクエリを作成しました。本体の文字列を元に戻して保存する方法がわかりません。ExecuteReader、ExecuteScalar、およびExecuteNonQueryを使用してみました。それらのどれも動作しません。ExecuteScalarは動作に最も近いものでしたが、どの行を表示しようとしても、最初の行のメッセージの本文のみが返されました。誰もがこれを行う方法を知っていますか?簡単に修正する必要があります。

  SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID=               MessageID", conn);
  com.Connection = conn;
  com.Connection.Open();
  String body;
  body = com.ExecuteScalar.ToString;

それが私が今持っているものです。前もって感謝します!

4

4 に答える 4

5

クエリのmessageIdとは何ですか?あなたはこのようなことをしているべきです

SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID = @MessageId");
com.Parameters.AddWithValue("@MessageId", 1); //Replace 1 with messageid you want to get
string s = com.ExecuteScalar().ToString()
于 2012-08-06T03:03:47.450 に答える
2

これにはSQLDataAdapterとDatatableを使用できます:

SqlCommand com = new SqlCommand("SELECT MessageID,Body FROM Messages WHERE MessageID=               MessageID", conn);
SqlDataAdapter dadapter=new SqlDataAdapter();
DataTable dt = new DataTable();
  com.Connection = conn;
  com.Connection.Open();
  String body;
  dadapter.SelectCommand=com;
  dadapter.Fill(dt);
  body = dr.Rows["Body"].toString();
于 2012-08-06T03:12:31.053 に答える
1

このようなことを試してみてください。

 SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID=              MessageID", conn);
com.Connection = conn;
com.Connection.Open();
String body;
SqlDataReader dr = com.ExecuteReader();
if(dr.HasRows){
while(dr.Read()){
 body+=dr["Body"].ToString();  
  }
}

これがあなたのために働くことを願っています。

于 2012-08-06T02:45:35.477 に答える
0

以下のNudierへの返信に基づいて、選択したメッセージのmessageIDを次のように渡そうとしています。WHERE MessageID = MessageID

これが機能しない理由、および常に最初の行が返される理由は、SQLがMessageIDが渡そうとしている変数であることを認識していないためです。SQLが知る限り、MessageIDは列です。名前なので、SQLに要求するのは、MessageID列= MessageID列である行の「Body」列を選択することだけです。MessageIDはそれ自体と等しく、常にtrueになります。また、ExecuteScalarは常に最初の行の最初のセルを返すため、クエリは常にメッセージテーブルからすべての行を返し、executeScalarは最初のセルを取得します。

うまくいけば、それが理にかなっていると思いますが、そうでない場合は、クエリをコピーしてSQLデータベースに対して実行すると、where句が常にtrueに等しいため、すべての行が返されるという意味がわかります。

これを修正するには、Anurajがパラメーターの追加について言ったことを考慮する必要があります。

コード内のSQL文字列に変数を渡すには、変数をパラメーター化してから、関連するパラメーターを追加する必要があります。これにより、SQLは次のようになります。

SELECT Body FROM Messages WHERE MessageID=@MessageID

(パラメーター名の前に@記号が追加されていることに注意してください?)

そして、その行のすぐ下で、次を使用してコードにパラメーターを追加する必要があります。

com.AddParameterWithValue("@MessageId", MessageId);

(そうだと思います。Anurajからコピーしました。通常は少し違う方法で行います)

繰り返しになりますが、これが機能することを確認するには、次を使用して、パラメーターを使用してデータベースに対して直接実行できます。

DECLARE @messsageID AS INTEGER
SET @messageID = 1
SELECT Body FROM Messages WHERE MessageID=@messageID

詳細については、これをお読みください(または、完全に明確にできていない場合)http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

于 2012-08-06T07:47:10.580 に答える