2017-03-04 4 views
0

データベーステーブルに次の詳細を追加しようとしています。質問。その答えとTOPICID [INT]入力文字列がC#[OffTopic]の正しい書式エラーではありません

C#コード:型 'にSystem.FormatException' が

private void AddingQuestions() 
{ 
using (MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;database=project;username=root;password=***;")) 
{ 
MySqlCommand cmd = new MySqlCommand("INSERT INTO questions (question, answer, topicID) VALUES (@Questions, @Answers, @TopicID);"); 
cmd.CommandType = CommandType.Text; 
cmd.Connection = connection; 
cmd.Parameters.AddWithValue("@Questions", TxtBoxQuestion.Text); 
cmd.Parameters.AddWithValue("@Answers", TxtboxAnswer.Text); 
cmd.Parameters.AddWithValue("@TopicID", Convert.ToInt32(TxtBoxTopicID.Text)); 
connection.Open(); 
cmd.Connection = connection; 
cmd.ExecuteNonQuery(); 
MessageBox.Show("Saved"); 
connection.Close(); 
} 
} 

未処理の例外がmscorlib.dllで発生した中で

追加情報:入力文字列はありませんでした正しい形式で

さらに
cmd.Parameters.AddWithValue("@TopicID", Convert.ToInt32(TxtBoxTopicID.Text)); 

::私はSQLインジェクションを防ぐためにparametrised SQLを使用するために、その良い習慣を知っているラインで

。 parametrised sqlを使用していますか?

+2

'TxtBoxTopicID'のテキストが有効な整数であることを確認してください –

+0

フォームが表示される前にこの例外が発生します。ボタンをクリックすると、このページに移動します。テキストボックスに整数値を加えても例外がスローされます。 – SnapShot

+2

まだ何も入力していない場合、TextBoxの値はnullまたは空の文字列で、intに変換することはできません。フォームを開くときにメソッドを呼び出すか、テキストボックスに有効なデフォルト値の –

答えて

1

コメントで述べたように、問題はあなたが

可能な解決策にフォームのオープン時に(それがnullまたは空の文字列です)、実際に値を持たないテキストボックスの値を変換しようということです。

  • 秒に答えるために有効なデフォルト値

でテキストボックスを埋める形

  • の起動時にメソッドを呼び出さないでください質問のecond部分: はい、既にパラメータ化されたクエリを使用しています。

  • +0

    はい、間違いはボタンの代わりに "load form"関数で関数を呼び出したことです。どうもありがとう。 – SnapShot

    関連する問題