6
string user = "1234";
string strSQL = string.Format("Select * From User where UserId = '{0}'",user);
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
reader = myCommand.ExecuteReader();

UserのテーブルはUserIdPassword列で構成されています。UserId列のタイプはncharなので、一重引用符を使用しました。というエラーが表示されます

キーワード User 付近の構文が正しくありません」

(テーブル名はここで参照されていると思いUserます)。

接続文字列とその他のデータベース環境に関連するものは正しくあります。データベース接続の状態を確認しましたが、(プログラムの実行中に) 開いています。

構文のエラーは何ですか? テーブルから行を取得できません。

4

4 に答える 4

9

Userはキーワードです。エラーを回避するために、角括弧で囲みます。Select * from [User]

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

また、SQL インジェクション攻撃を防ぐために、以下のようなパラメーター化されたクエリを常に使用する必要があります。

string strSQL = string.Format("Select * From [User] where UserId = @UserId");
于 2013-01-02T10:57:07.743 に答える
8

これには実際にパラメーターを使用する必要があります。

string user = "1234";

using (SqlCommand command = new SqlCommand("select * from [User] where UserId = @userid", cnn))
{
    command.Parameters.AddWithValue("@userid", user);

    using (SqlDataReader reader = myCommand.ExecuteReader())
    {
        // iterate your results here
    }
}

他の投稿者によく見られますが、あなたのテーブル名に予約語が含まれていることに気づきませんでした。私は自分の答えを修正しました - しかし、明らかなことを見逃したことを信用することはできません!

于 2013-01-02T10:58:15.827 に答える
3

user括弧で囲む必要があります[]

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

上記のクエリは、SQL Injection. これを回避するには、パラメータ化する必要があります。次に例を示します。

string user = "1234";
string strSQL = "Select * From [User] where UserId = @userID";
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
myCommand.AddWithValue("@userID", user);
reader = myCommand.ExecuteReader();

以下を使用します

  • Try-Catchエラーを適切にキャッチするためのブロック
  • usingオブジェクトの適切な廃棄に関する声明

スニペット:

string user = "1234";
string strSQL = "Select * From [User] where UserId = @userID";
using (SqlConnection cnn = new SqlConnection("connection string here"))
{
    using (SqlCommand myCommand = new SqlCommand(strSQL, cnn))
    {
        myCommand.Parameters.AddWithValue("@userID", user);
        using (SqlDataReader reader = myCommand.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine(reader["columnName"].ToString());
            }
        }
    }
}
于 2013-01-02T10:57:11.660 に答える
2

で包み[]ます。キーワードです。Reserved KeywordsMSDN の記事を読んでください。

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

しかし、もっと重要なことは、クエリがSQL Injection攻撃にさらされていることです。常にパラメーター化されたクエリを使用する必要があります。

string strSQL = "Select * From [User] where UserId = @userID";
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
myCommand.Parameters.AddWithValue("@userID", user);
于 2013-01-02T10:57:42.473 に答える