无法解决这个问题的任何帮助?代码在此行停止。我忘了提到我有一个主键,每次添加一个新记录时,它会递增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()
答案 0 :(得分:3)
您是否尝试过首先将文本转换为整数。
I.E改变:
cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = txtNumOfRooms.Text
到
cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value = CInt(txtNumOfRooms.Text)
所有其他整数也是如此。
基本上你告诉参数期望的数据类型;在这种情况下SqlDbType.Int
,因此您需要转换输入数据;在这种情况下,txtNumOfRooms.Text
为预期类型。
答案 1 :(得分:1)
您应首先将txtNumOfRooms
和txtCost
的内容转换为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)
答案 2 :(得分: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)
答案 3 :(得分:0)
您需要将TextBox的Text值(string
)转换为具有Integer
dataType的列的int
值,如下所示
cmd.Parameters.Add("@NUMBEROFROOMS", SqlDbType.Int).Value =CInt(txtNumOfRooms.Text);
答案 4 :(得分:0)
您是否正在对文本框进行验证以验证字符串是否为有效的int?