2016-09-08 2 views
0

こんにちは、sqlの値を日付としてテキストボックスに取り込みたいと思います。私はこのコードを使用しています:TextBox = SelectからSqlへの変換日時

SqlCommand command = new SqlCommand("select top 1 expirationdate from incomes where memberid='0' or memberid = '" + textBox22.Text + "' order by expirationdate DESC", con); 
textBox17.Text = command.ExecuteScalar().ToString("d/M/yyyy"); 

私はエラーを取得する:メソッドの過負荷は、「ToStringメソッドは、」あなたが最初のDateTimeに変換する必要があり1つの引数

+1

を ' ExecuteScalar'はオブジェクトを返します。適切な型( 'DateTime'?)にキャストしてください。オーバーロードされた 'ToString(s)'を呼び出すことができます。 – sstan

+4

決して。入力をSQLに連結しないでください。 –

+0

良いオレのボビードロップテーブルがあなたを訪問するつもりです。 https://xkcd.com/327/ – rick

答えて

2

を取りません。また、SQLのパラメタを使用してSQLインジェクションを回避します。

SqlCommand command = new SqlCommand("select top 1 expirationdate from incomes where memberid='0' or memberid = @memberId order by expirationdate DESC", con); 
    command.Parameters.AddWithValue("memberId",textBox22.Text); 
    var result = command.ExecuteScalar().ToString(); 
    textBox17.Text = Convert.ToDateTime(result).ToString("d/M/yyyy"); 
+0

私に例を書いてもいいですか? – DiH

+0

完璧に働く人に感謝します! – DiH

+0

あなたは歓迎します、それを答えとして受け入れることができます。 – zulq

1

まず:使用パラメータ

第二は:

int memberId = int.Parse(textBox22.Text); // or whatever 
DateTime expiry; 
using(var command = new SqlCommand(
    "select top 1 expirationdate from incomes where memberid='0' or memberid = @memberid order by expirationdate DESC", con)) 
{ 
    command.Parameters.AddWithValue("memberid", memberId); // again, about 20 ways to do this 
    expiry = (DateTime)command.ExecuteScalar(); 
} 
textBox17.Text = expiry.ToString("d/M/yyyy"); // or whatever 

または "Dapperの" のようなツールでそれをフォーマットしようとする前ExecuteScalarから値をキャスト:

int memberId = int.Parse(textBox22.Text); // or whatever 
var expiry = con.QuerySingle<DateTime>(
    "select top 1 expirationdate from incomes where memberid='0' or memberid = @memberid order by expirationdate DESC", 
    new { memberId }); 
textBox17.Text = expiry.ToString("d/M/yyyy"); // or whatever 
+0

あなたの最初の例では、私は再び同じエラーを受け取ります – DiH

+0

@DiH編集を参照してください。 'expiry.ToString()'のためのものでした。 –