2017-04-25 16 views
-1

nvarcharデータ型をdatetimeデータ型 に変換すると、範囲外の値が返されました。SQL内の例外日時

マイコード:

string sqlthem = "INSERT INTO Infosp1 VALUES (@khach,@sp,@sl,@gia,@tg)"; 
     string sqlconvert = "select CONVERT(varchar(20),[Tg], 103) from Infosp1"; 
     SqlCommand cmd = new SqlCommand(sqlthem, con); 
     cmd.Parameters.AddWithValue("Khach", cbbtenkh.Text); 
     cmd.Parameters.AddWithValue("Sp", cbbmahang.Text); 
     cmd.Parameters.AddWithValue("Sl", cbbsl.Text); 
     cmd.Parameters.AddWithValue("Gia", cbbgia.Text); 
     cmd.Parameters.AddWithValue("Tg", datetg.Text);   
     cmd.ExecuteNonQuery(); 

あなたはdatetime型にあなたのパラメータを変換する必要がある日時フィールドを持っている場合は.ExecuteNonQuery()

Plsは

+1

あなたのパラに正しいタイプを使用してくださいパラメータインスタンスで型を指定し、正しい型の値を追加します。 [ベストプラクティス - SQL文の実行](http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements)も参照してください。 – Igor

+2

実際には、パラメータの型がDBの列の型と一致するようにしてください。そうするには、まず 'string'値を' DateTime'に解析する必要があります。また、[AddWithValue'を使用しない]ことを検討してください(http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) – juharr

+0

渡された値の例を表示できますか'datetg'変数にありますか? – nocodename

答えて

0

に表示されます。間違った形式がある可能性がありますので、

string sqlconvert = "select CONVERT(varchar(20),[Tg], 103) from Infosp1"; 

はあなたが変換されない文字列を挿入しよう、と:あなたは、この変換を実行する場合、それはあなたがこのクエリを実行していないため、動作しません。

cmd.Parameters.AddWithValue("Tg", datetg.Text); 

ので、同じようにそのデータ型を定義するSQLパラメータ作成してみてください:

cmd.Parameters.Add("Tg", SqlDbType.DateTime).Value = Convert.ToDateTime(datetg.Text); 

は、理想的には、解析の代わりに

...またはSQLスクリプトに変換を呼び出すためにどこかのCultureInfoを持っている必要がありますが、ように:

string sqlthem = @"declare @dt datetime 
    select @dt = CONVERT(varchar(20), @tg, 103) 
    INSERT INTO Infosp1 VALUES (@khach,@sp,@sl,@gia,@dt)"; 
+0

詳細な説明をありがとう。私は試しましたが、この例外が表示されます: '追加情報:varcharデータ型をdatetimeデータ型に変換すると、範囲外の値が返されました。' –

+0

試してみてください DateTime tg; TryParse(datetg.Text、tg out); cmd.Parameters.Add( "Tg"、SqlDbType.DateTime).Value = tg; – barzozwierz

+0

ニース。出来た。どうもありがとうございます !!! –