0

関連する行をデータテーブルに取得しようとしています。列の値が他のSQLテーブルの値の1つと等しい行のみが必要です。それが私のコードです:

try
{
     sc.Open();
     for (int i = 0; i < queryTokens.Length; i++)
     {
          cmd = new SqlCommand("INSERT INTO QueryIndex (Term) Values ('" + queryTokens[i] + "')", sc);
          cmd.ExecuteNonQuery();
     }
     cmd = new SqlCommand("SELECT * FROM TermsIndex Where Term EXIST (Select Term From QueryIndex)");
     SqlDataAdapter da = neuw SqlDataAdapter(cmd);
     da.Fill(tempTable);
     da.Dispose();
     sc.Close();
}
catch (Exception e)
{
     Console.WriteLine(e.ToString());
}

挿入の最初の部分はうまくいっていると確信していますが、2 番目の部分では、私がやろうとしていることを皆さんが理解してくれることを願っています。ここに構文エラーがあることはわかっているので、修正してください。例外メッセージ: {"値を null にすることはできません。\r\nパラメータ名: dataTable"} Null 例外..

これは私のSQL作成テーブルです:

CREATE TABLE [dbo].[TermsIndex]
(
    [ID] VARCHAR(35) NOT NULL,
    [Term] VARCHAR(35)  NOT NULL,
    [Frequency] int NOT NULL,
    [Offset] VARCHAR(MAX) NOT NULL,
)


CREATE TABLE [dbo].[QueryIndex]
(
    [Term] VARCHAR(MAX) NOT NULL,
)

では、なぜその null エラーが発生するのですか? とにかく、最初のエントリのエントリと列を比較できるようにするためだけにテーブルを作成しています。すでに文字列配列があり、その列の値を変更する文字列(トークン)の数と比較して返すことができる可能性がありますSQLコマンドの文字列の1つと等しい場合、行の結果は? または、必要な結果を得るためのよりエレガントな方法はありますか?

4

2 に答える 2

1

DataTable tempTable;私はあなたがあなたのコードにあると仮定します。あなたはそれを初期化します。

DataTable tempTable = new DataTable();
于 2013-01-20T21:20:59.820 に答える
0

クエリを実行するには、いくつかの方法があります。

SELECT DISTINCT T.* FROM TermsIndex T
INNER JOIN QueryIndex Q ON T.Term = Q.Term;

SELECT T.* FROM TermsIndex T
WHERE T.Term IN (SELECT Q.Term FROM QueryIndex Q);

SELECT T.* FROM TermsIndex T
WHERE EXISTS(SELECT Q.Term FROM QueryIndex Q WHERE Q.Term = T.Term);

SELECT T.* FROM TermsIndex T
WHERE T.Term IN('term1', 'term2', 'term3');

注:dataTable投稿されたコードにはありません。

于 2013-01-20T21:16:04.733 に答える