0

データベースを使用して、部署の名前を一意の郵送コードに関連付けています。つまり、会計には郵送コード 1337 があります。ShortName と ID は、クエリ対象のデータベースのフィールドです。

スキーマは

  • ID int
  • ShortName nvarchar(255)

これは、C# を使用して Web ページのバックエンドで行われます。同じコードの別の場所でオブジェクトを使用しSqlDataReaderましたが、これによるエラーは発生しませんでした。どこかに構文エラーがあると思います。または、文字列を int または何かばかげたものに貼り付けようとしていますが、表示されません。

ページのSqlConnection読み込み時にクエリに使用され、指定された行がコメントアウトされているときに機能するため、正しく設定されています。

SqlDataReader SQl_Reader;
string cmdString = "SELECT ShortName FROM departments WHERE (ID = " +
  department_Text.SelectedValue.ToString() + ")"; //a selected value in department_text would be the mailing code such as 1337, or 1304.

SqlCommand SQl_Command2 = new SqlCommand(cmdString, SQl_Connection);

SQl_Reader = SQl_Command.ExecuteReader();

string deptName = SQl_Reader["ShortName"].ToString();//This should assign the deptName = the value in SQl_Reader but it causes the page not to load. Not sure what is wrong with it

SQl_Reader.Close();
SQl_Connection.Close();

このクエリのためだけに独自の接続、コマンド、およびリーダーを使用しても、この複数の異なる方法を試しました。コードの別の関数で同じ2つのフィールドを使用しSqlDataReaderて同様の目的で使用しましたが、完全に機能します。どんな洞察も非常に高く評価されます。

4

3 に答える 3

2

データを取得する前に、SQl_Reader から .Read() を実行する必要があります。通常、あなたはするでしょう

While (SQl_Reader.Read() )
{
   // Get values here
}

返される行が 1 つだけであることが確実な場合は、クエリを次のように変更する必要があります。

Select top 1 ShortName FROM 

しかし、まだ Read() が必要です。また、インジェクション攻撃を受けやすいというコメントにも同意します。department_Text.SelectedValue をクエリ パラメータとして渡す必要があります。

于 2013-06-24T20:57:16.987 に答える
1

ID は主キーであると想定しているため、特定の ID に対して他に可能な値ExecuteScalarはありません。その後、ジョブを実行します。

string cmdString = "SELECT ShortName FROM departments WHERE (ID = @depId)";

using (SqlCommand SQl_Command2 = new SqlCommand(cmdString, SQl_Connection))
{
    //a selected value in department_text would be the mailing code such as 1337, or 1304.
    SQl_Command2.Parameters.Add("@depId", System.Data.SqlDbType.Int).Value = department_Text.SelectedValue;

    string deptName = (string)SQl_Command2.ExecuteScalar();
}

SqlCommand.Parameters Property文字列連結の代わりに使用することを忘れないでください。

オブジェクトを自動的に破棄するために使用するのは良いusingことです。詳細については、関連する SqlConnection が破棄される場合、SqlCommand.Dispose() が必要ですか? .

于 2013-06-24T21:01:19.550 に答える