2012-01-06 9 views
0

ユーザーが個人情報を入力し、テキストボックスの値がMS SQLレコードに挿入されるASP.NETウィザードがあります。レコードを挿入するとき はしかし、私は次のエラーを取得する:ADO.NETの日付としてテキストボックスを使用する方法

SQL Server error #241: Conversion failed when converting date and/or time from character string

コード:

string insertSQL; 
insertSQL = "INSERT INTO member ("; 
insertSQL += "UserId, mem_dob,) "; 
insertSQL += "VALUES ("; 
insertSQL += "@UserId, @mem_dob"; 
insertSQL += ")"; 

SqlConnection con = new SqlConnection(connectionString); 
SqlCommand cmd = new SqlCommand(insertSQL, con); 

//Add the parameters. 
cmd.Parameters.AddWithValue("@UserId", providerIdKeyString); 
cmd.Parameters.AddWithValue("@mem_dob", DateOfBirth.Text); 

任意のアイデア解決する最良の方法は?テキストボックスを使用しないでください。 私はウェブフォームをシンプルにしたいと思っていました。

おかげ

+0

はどのようにWebフォームで日付を検証していますか? –

答えて

0

あなたは、単に有効なDateTimeTextを解析する必要があります。もちろん

cmd.Parameters.AddWithValue("@mem_dob", DateTime.Parse(DateOfBirth.Text)); 

http://msdn.microsoft.com/en-us/library/1k1skd40%28v=VS.100%29.aspx

あなたはすでに入力された「日付」は、この段階で有効であることを検証している必要があります。

+0

ありがとう - 私のコメントを上記のように見てください。 – bjh

0

テキストボックスに入力された日付のようなサウンドは、SQLによれば無効な日付です。日付をパラメータとして追加する前に、有効性をチェックしてください。例えば

DateTime myDate; 
if(textBox1.TryParse(DateOfBirth.Text, out myDate)) 
{ 
    // Date is valid. 
} else 
{ 
    // Take corrective actions to fix the date. 
} 

は、単にそれはあなたが単に有効な日付を入力するようにユーザを信頼してはならないとして、故障に開放してアプリケーションを残す有効なのですかどうかを知らずに日付を解析しようとします。

+0

ありがとうございましたが、私はウィザードコントロールで日付を検証しました。 – bjh

0
DateTime t; 
String Date = String.Empty; 
if (DateTime.TryParse(Date, out t)) 
{ 
    cmd.Parameters.AddWithValue("@mem_dob", t); 
} 
+0

ありがとう!また、この作品が見つかりました:cmd.Parameters.AddWithValue( "@ mem_dob"、Convert.ToDateTime(DateOfBirth.Text));おそらく解析はおそらく良いですか? – bjh

0

日、月、年の3つのドロップダウンコントロールと、日付を設定/取得するパブリックプロパティ/メソッドを含む簡単なユーザーコントロールを作成する必要があります。 ASP.NET Ajaxコントロールについて考えることができます。

Textboxを使用する場合は、CompareValidatorコントロールまたはJavaScriptと正規表現を介してユーザー入力を制限します。日付列がDateTime.TryParse、またはDateTime.ParseExact(DateTime.TryParseExact)メソッドを使用して解析する

string[] inputFormat = {"dd-MM-yy","dd/mm/yy","dd-MMM-yyyy"}; 
string userDate = "31-12-11"; 
DateTime date; 
if (DateTime.TryParseExact(userDate, 
          inputFormat, 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out date)) 
      { 
       //valid 
      } 
関連する問題