protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand(string.Format("insert into dbo.FillTable values ('{0}', '{1}', 'FA0005')", TextBox2.Text, TextBox1.Text), con);
SqlDataAdapter dr = new SqlDataAdapter(cmd1);
con.Close();
DataSet dl = new DataSet();
dr.Fill(dl);
}
string.Format
では、機能を分解してみましょう。このように書式設定する文字列がある場合"Hello {0}!"
、関数のゼロ インデックスで渡すものはすべて、出現する{0}
. それで、私がこの文字列を持っていて、"Hello {0}, and I say again hello {0}!"
それをこのように使用したとしましょう。string.Format("Hello {0}, and I say again hello {0}!", "world")
このような文字列が得られます"Hello **world**, and I say again hello **world**!"
。
ノート
ただし、上記の解決策では SQL インジェクションにさらされる可能性があるため、それから保護したい場合は、このルートに進みましょう。
protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into dbo.FillTable values (@TextBox2Val, @TextBox1Val, 'FA0005')", con);
cmd1.AddParameterWithValue( "TextBox1Val", TextBox1.Text );
cmd1.AddParameterWithValue( "TextBox2Val", TextBox2.Text );
SqlDataAdapter dr = new SqlDataAdapter(cmd1);
con.Close();
DataSet dl = new DataSet();
dr.Fill(dl);
}
これを分解してみましょう。SQL サーバーに送信されるステートメントは、文字列に が含まれている、まさにあなたが見るものです@paramname
。ただし、それを として送信prepare
し、メソッドで指定した値を使用してそのステートメントを準備しますAddParameterWithValue
。ここで、 の値がTextBox2.Text
日付である限り、SQL サーバーが処理するため、形式を気にする必要はありません。SQL サーバーはそれをある形式で保存し、別の形式で表示しますが、有効である限り、無数の形式から変換できることに注意してください。
さて、@Willemが述べたように、値TextBox2.Text
が実際に日付であることを確認するのは当然のことなので、そうしましょう。このスニペットを関数の先頭に追加します...
DateTime theDate;
if (!DateTime.TryParse(TextBox2.Text, out theDate))
{
// throw some kind of error here or handle it with a default value
...
}
...そして、次のように行を変更しAddParameterWithValue
ます...
cmd1.AddParameterWithValue( "TextBox2Val", theDate );