0

これで問題を解決できませんか?コードはこの行で停止します。新しいレコードが追加されるたびに 1 ずつ増加する主キーがあることを忘れていました。データベースでは、これも整数です。これらのレコードがすべて追加されたときにそれ自体が追加されると推測したため、このコードには追加しませんでした。それが理にかなっている場合。

recordsAffected = cmd.ExecuteNonQuery, 

これで何が問題なのかわかりません。

Dim conn As SqlConnection
Dim cmd As SqlCommand
Dim recordsAffected As String
Dim cmdstring As String = "INSERT House (TypeofHouse, NumberofRooms, Location, Cost, Information, Picture) Values(@TYPEOFHOUSE, @NUMBEROFROOMS, @LOCATION, @COST, @INFORMATION, @PICTURE)"

conn = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\House.mdf;Integrated Security=True;User Instance=True")

cmd = New SqlCommand(cmdstring, conn)

cmd.Parameters.Add("@TYPEOFHOUSE", SqlDbType.NVarChar).Value = txtType.Text
cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = txtNumOfRooms.Text
cmd.Parameters.Add("@LOCATION", SqlDbType.NVarChar).Value = txtLocation.Text
cmd.Parameters.Add("@COST", SqlDbType.Int).Value = txtCost.Text
cmd.Parameters.Add("@INFORMATION", SqlDbType.NVarChar).Value = txtInfo.Text
cmd.Parameters.Add("@PICTURE", SqlDbType.NVarChar).Value = txtLocation.Text

conn.Open()

recordsAffected = cmd.ExecuteNonQuery
conn.Close()
4

5 に答える 5

3

最初にテキストを整数に変換してみましたか。

IE の変更:

cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = txtNumOfRooms.Text

cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = CInt(txtNumOfRooms.Text)

他のすべての整数についても同じことが言えます。

基本的に、期待するデータ型をパラメーターに伝えます。SqlDbType.Intこの場合、入力データを変換する必要があります。txtNumOfRooms.Textこの場合、期待されるタイプに。

于 2013-04-30T20:39:13.097 に答える
1

txtNumOfRoomsandの内容txtCostint最初に変換する必要があります。

それぞれの入力フィールドのテキストが実際に数値である場合、以下の関数呼び出しのいずれかが機能する可能性があります。

  • CInt(txtNumOfRooms.Text)
  • Int32.Parse(txtNumOfRooms.Text)
  • Convert.ToInt32(txtNumOfRooms.Text)

ただし、ユーザー入力を使用しているため、変換を試みる前に、数値の入力が実際に数値であるかどうかを確認することをお勧めします。

If Not IsNumeric(txtNumOfRooms.Text) OrElse Not IsNumeric(txtCost.Text) Then
    Throw new InvalidOperationException("Trying to convert a string to an integer")  
End If

cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = CInt(txtNumOfRooms.Text)
cmd.Parameters.Add("@COST", SqlDbType.Int).Value = CInt(txtCost.Text)
于 2013-04-30T20:40:00.223 に答える
0

Int 型の 2 つのパラメーターがありますが、テキスト文字列を値として設定します。

cmd.Parameters.Add("@TYPEOFHOUSE", SqlDbType.NVarChar).Value = txtType.Text
cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = Convert.ToInt32(txtNumOfRooms.Text)
cmd.Parameters.Add("@LOCATION", SqlDbType.NVarChar).Value = txtLocation.Text
cmd.Parameters.Add("@COST", SqlDbType.Int).Value = Convert.ToInt32(txtCost.Text)
cmd.Parameters.Add("@INFORMATION", SqlDbType.NVarChar).Value = txtInfo.Text
cmd.Parameters.Add("@PICTURE", SqlDbType.NVarChar).Value = txtLocation.Text

また、使用できます

cmd.Parameters.AddWithValue("@TYPEOFHOUSE", txtType.Text)
cmd.Parameters.AddWithValue("@NUMBEROFROOMS", Convert.ToInt32(txtNumOfRooms.Text))
cmd.Parameters.AddWithValue("@LOCATION", txtLocation.Text)
cmd.Parameters.AddWithValue("@COST", Convert.ToInt32(txtCost.Text))
cmd.Parameters.AddWithValue("@INFORMATION", txtInfo.Text)
cmd.Parameters.AddWithValue("@PICTURE", txtLocation.Text)

もちろん、これら 2 つのテキスト ボックスに、int に変換できる実際の文字列が含まれていることを確認する必要があります。それ以外の場合、CInt、Parse、または Convert.ToInt32 を使用すると、例外が発生します。次の例のように、 Int32.TryParse
を 使用してパラメーター コレクションに入力する前に、少しエラー チェックを導入できます。

Dim numOfRooms as Integer
if Not Int32.TryParse(txtNumOfRooms.Text, numOfRooms) Then
    MessageBox.Show("Type a valid number")
    return
End If

cmd.Parameters.AddWithValue("@NUMBEROFROOMS", numOfRooms)
于 2013-04-30T20:39:10.300 に答える
0

このように、TextBox の Text 値をdataTypestringInteger持つ列の値に変換する必要があります。int

cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value =CInt(txtNumOfRooms.Text);
于 2013-04-30T20:39:31.613 に答える