2013-07-09 40 views
0

我使用vb.net,我想从我的Windows窗体中插入一行到我的db表“adwPays”。 这是我的代码: 昏暗的CC,EngName,FreName,LanCode作为字符串 昏暗DialCode作为整数如何从vb.net插入一行到我的数据库表

CC = txtCC.Text 
    EngName = txtEN.Text 
    FreName = txtFN.Text 
    LanCode = txtLC.Text 
    DialCode = txtDC.Text 


    Dim MyConn As New SqlConnection("Server=(local);Database=dbAjout;Integrated Security=True") 
    Dim query As String 
    query = "INSERT INTO adwPays (CC, Anglais,Francais,CodeLangue,IndicInter) VALUES (' " & CC & "','" & EngName & "','" & FreName & "','" & LanCode & "','" & DialCode & " ');" 

    Dim cmd As New SqlCommand(query, MyConn) 

    MyConn.Open() 
    cmd.ExecuteScalar() 
    MyConn.Close() 

但它给我这个错误 “类型的未处理的异常“System.Data.SqlClient.SqlException '发生在System.Data.dll中

附加信息:字符串或二进制数据将被截断 该语句已被终止。

有帮助吗?

+0

我也试过cmd.ExecuteNonQuery(),但它不工作! – user2550171

回答

0

使用这样

Dim query = "INSERT INTO adwPays (CC, Anglais,Francais,CodeLangue,IndicInter) " & 
      "VALUES (@cc, @ename, @fname, @lan, @dial)" 
Using MyConn = New SqlConnection("Server=(local);Database=dbAjout;Integrated Security=True") 
Using cmd = New SqlCommand(query, MyConn) 
    cmd.Parameters.AddWithValue("@cc", CC) 
    cmd.Parameters.AddWithValue("@ename", EngName) 
    cmd.Parameters.AddWithValue("@fname", FreName) 
    cmd.Parameters.AddWithValue("@lan", LanCode) 
    cmd.Parameters.AddWithValue("@dial", DialCode) 
    MyConn.Open() 
    cmd.ExecuteNonQuery() 
End Using 
End Using 

参数化查询使用参数化查询允许以避免SQL注入的问题,并从周围的字符串和日期格式引号清除命令文本,也让框架代码传递正确的当需要时用于数字类型的小数点

我还在SqlConnection和SqlCommand周围添加了一个Using Statement以确保对象已关闭并销毁。参数全部以字符串形式传递,如果您的任何数据库字段不是文本类型,则这可能是错误的。

+0

非常感谢你史蒂夫! D工作时间: – user2550171

0

听起来好像你有一个String值比数据库类型大小允许的值要长。您可以验证以下每个字段的类型和尺寸:

  • CC
  • 的ename
  • FNAME
  • LAN

现在交叉引用这些大小与价值是什么在文本框字段中,您将从UI中拉取它们。

我的钱超出了数据库大小限制之一。

如果是这种情况,那么您需要在尝试保存到数据库之前引入长度检查。

相关问题