0

无法解决这个问题的任何帮助?代码停在这一行。我忘了提到我有一个主键,每次添加新记录时它都会增加一个。在数据库中它也是一个整数。我没有将它添加到此代码中,因为我认为当添加所有这些记录时它会自行添加。如果这是有道理的。

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

您应该将 和 的内容转换为txtNumOfRoomstxtCost一个int

如果相应输入字段中的文本实际上是数字,则以下任何一个函数调用都可能起作用:

  • 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 类型的参数,但您将文本字符串设置为值。

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)

当然,您需要确保这两个文本框包含可以转换为 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 值string转换Integer为具有intdataType 的列的值,如下所示

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

您是否在文本框上执行验证以验证字符串是否为有效的 int?

于 2013-05-01T00:53:11.730 回答