Vb.net显示将数据保存到SQL Server时出错 [英] Vb.net shows error on saving data to SQL server

查看:77
本文介绍了Vb.net显示将数据保存到SQL Server时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在BV.Net和SQL Server中创建LMS。书中添加表单包含文本框组合框和图片框。当我单击保存按钮时它显示以下错误消息

将varchar值'Saman'转换为数据类型int时转换失败。

在表单加载中,组合框填充整个表中的数据。

[表和关系] [1]< br />
[要插入的数据] [2]< br />
[数据类型表] [3]< br />
[保存时出现错误信息] [4]< br />

[1]:https://i.stack.imgur.com/bVEHH.png
[2]:https://i.stack.imgur.com/NVEGX.png
[3]:https://i.stack.imgur.com/uArlL.png
[4]:https://i.stack.imgur.com/7jUm1.png



我尝试过:



我尝试使用以下编码

表单加载编码

Private Sub frmAddBook_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)处理MyBase.Load

'加载作者详细信息
使用com作为新SqlCommand(SELECT * FROM tblBookAuthor,con)

Dim dt As New DataTable()
dt.Load(com.ExecuteReader)
cmbAuthor.DataSource = dt
cmbAuthor.DisplayMember =authorFirstName
cmbAuthor.ValueMember =authorFirstName
'con.Close()
结束使用

'加载发布者详细信息
使用com2作为新的SqlCommand(SELEC T * FROM tblPublisher,con)

Dim dt As New DataTable()
dt.Load(com2.ExecuteReader)
cmbPub.DataSource = dt
cmbPub。 DisplayMember =publisherName
cmbPub.ValueMember =publisherName

'con.Close()
End using

'加载类详情
使用com3作为新的SqlCommand(SELECT * FROM tblBookClass,con)

Dim dt As New DataTable()
dt.Load(com3.ExecuteReader)
cmbClass .DataSource = dt
cmbClass.DisplayMember =classDetail
cmbClass.ValueMember =classDetail
'con.Close()
End using

'加载书架详细信息
使用com4 As New SqlCommand(SELECT * FROM tblBookShelfDetail,con)

Dim dt As New DataTable()
dt.Load(com4.ExecuteReader )
cmbBookShelf.DataSource = dt
cmbBookShelf.DisplayMember =shelfDetail
cmbBookShelf.ValueMember =shelfDetail
con.Close()
End using

结束Sub


保存按钮编码

Private Sub btnSave_Click(sender As Object,e As EventArgs)处理btnSave.Click

sql =INSERT INTO tblBookDetail(accessionNo,authorId,title,pages,price,ISBN,noOfCopies,pubId,classId,source,bookShelfNo,bookEdition,bookCoverImg)VALUES(@accNo,@ auID,@ title,@ pages,@ price,@ ISBN,@ noOfCopies,@ pubID,@ classID,@ src,@ shlfNo,@edition,@ img)

Dim ms As New MemoryStream()
picPhoto.Image.Save(ms ,picPhoto.Image.RawFormat)

con.Open()
cmd =新的SqlCommand(sql,con)

cmd.Parameters.Add(@ accNo ,SqlDbType.Int).Value = txtBookID.Text
cmd.Parameters.Add(@ auID,SqlDbType.VarChar).V alue = cmbAuthor.Text
cmd.Parameters.Add(@ title,SqlDbType.VarChar).Value = txtEdition.Text
cmd.Parameters.Add(@ pages,SqlDbType.Int)。 Value = txtPageNo.Text
cmd.Parameters.Add(@ price,SqlDbType.Decimal).Value = txtPrice.Text
cmd.Parameters.Add(@ ISBN,SqlDbType.Int)。 Value = txtISBN.Text
cmd.Parameters.Add(@ noOfCopies,SqlDbType.Int).Value = txtNoOfCopies.Text
cmd.Parameters.Add(@ pubID,SqlDbType.VarChar)。 Value = cmbPub.Text
cmd.Parameters.Add(@ classID,SqlDbType.VarChar).Value = cmbClass.Text
cmd.Parameters.Add(@ src,SqlDbType.VarChar)。 Value = cmbSrc.Text
cmd.Parameters.Add(@ shlfNo,SqlDbType.VarChar).Value = cmbBookShelf.Text
cmd.Parameters.Add(@ edition,SqlDbType.Int)。 Value = txtEdition.Text

cmd.Parameters.Add(@ img,SqlDbType.Image).Value = ms.ToArray

cmd.ExecuteNonQuery()

MsgBox (SUCCESS)
con.Close()

End Sub

解决方案

你是分配组合框的.Text属性(即displayMember)转到tblBookDetail.authorId的@auID参数;

 cmd.Parameters.Add(@ auID,SqlDbType.VarChar).Value = cmbAuthor.Text 



您要分配的是ValueMember中作者的数字ID。因此,您需要访问所选项目的ValueMember,尝试

 cmd.Parameters.Add(@ auID,SqlDbType.VarChar).Value = cmbAuthor.SelectedValue 


I am creating a LMS in BV.Net and SQL Server. The book adding form contains text boxes combo boxes and picture box. When I click the save button It says the following error message

    Conversion failed when converting the varchar value 'Saman' to data type int. 

On the form load the combo boxes populate the data from the entire tables.

[Tables and relationship][1] <br/>
[Data to be inserted][2] <br/>
[Tables with data type][3] <br/>
[Error message on saving][4] <br/>

  [1]: https://i.stack.imgur.com/bVEHH.png
  [2]: https://i.stack.imgur.com/NVEGX.png
  [3]: https://i.stack.imgur.com/uArlL.png
  [4]: https://i.stack.imgur.com/7jUm1.png



What I have tried:

I tried with the following coding

Form load coding

    Private Sub frmAddBook_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'To load Author details
        Using com As New SqlCommand("SELECT * FROM tblBookAuthor", con)

            Dim dt As New DataTable()
            dt.Load(com.ExecuteReader)
            cmbAuthor.DataSource = dt
            cmbAuthor.DisplayMember = "authorFirstName"
            cmbAuthor.ValueMember = "authorFirstName"
            ' con.Close()
        End Using
        
		'To load Publisher details
        Using com2 As New SqlCommand("SELECT * FROM tblPublisher", con)

            Dim dt As New DataTable()
            dt.Load(com2.ExecuteReader)
            cmbPub.DataSource = dt
            cmbPub.DisplayMember = "publisherName"
            cmbPub.ValueMember = "publisherName"

            ' con.Close()
        End Using
        
        'To load Class details
        Using com3 As New SqlCommand("SELECT * FROM tblBookClass", con)

            Dim dt As New DataTable()
            dt.Load(com3.ExecuteReader)
            cmbClass.DataSource = dt
            cmbClass.DisplayMember = "classDetail"
            cmbClass.ValueMember = "classDetail"
            ' con.Close()
        End Using
        
		'To load bookshelf details
        Using com4 As New SqlCommand("SELECT * FROM tblBookShelfDetail", con)

            Dim dt As New DataTable()
            dt.Load(com4.ExecuteReader)
            cmbBookShelf.DataSource = dt
            cmbBookShelf.DisplayMember = "shelfDetail"
            cmbBookShelf.ValueMember = "shelfDetail"
            con.Close()
        End Using
        
    End Sub


Save button coding

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

        sql = "INSERT INTO tblBookDetail (accessionNo, authorId, title, pages, price, ISBN, noOfCopies, pubId, classId, source, bookShelfNo,bookEdition, bookCoverImg) VALUES (@accNo, @auID, @title, @pages, @price, @ISBN, @noOfCopies, @pubID, @classID, @src, @shlfNo, @edition, @img)"

        Dim ms As New MemoryStream()
        picPhoto.Image.Save(ms, picPhoto.Image.RawFormat)

        con.Open()
        cmd = New SqlCommand(sql, con)

        cmd.Parameters.Add("@accNo", SqlDbType.Int).Value = txtBookID.Text
        cmd.Parameters.Add("@auID", SqlDbType.VarChar).Value = cmbAuthor.Text
        cmd.Parameters.Add("@title", SqlDbType.VarChar).Value = txtEdition.Text
        cmd.Parameters.Add("@pages", SqlDbType.Int).Value = txtPageNo.Text
        cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = txtPrice.Text
        cmd.Parameters.Add("@ISBN", SqlDbType.Int).Value = txtISBN.Text
        cmd.Parameters.Add("@noOfCopies", SqlDbType.Int).Value = txtNoOfCopies.Text
        cmd.Parameters.Add("@pubID", SqlDbType.VarChar).Value = cmbPub.Text
        cmd.Parameters.Add("@classID", SqlDbType.VarChar).Value = cmbClass.Text
        cmd.Parameters.Add("@src", SqlDbType.VarChar).Value = cmbSrc.Text
        cmd.Parameters.Add("@shlfNo", SqlDbType.VarChar).Value = cmbBookShelf.Text
        cmd.Parameters.Add("@edition", SqlDbType.Int).Value = txtEdition.Text

        cmd.Parameters.Add("@img", SqlDbType.Image).Value = ms.ToArray

        cmd.ExecuteNonQuery()

        MsgBox("SUCCESS")
        con.Close()

    End Sub

解决方案

You are assigning the .Text property of the combobox (i.e. the DisplayMember) to the @auID parameter that goes to tblBookDetail.authorId;

cmd.Parameters.Add("@auID", SqlDbType.VarChar).Value = cmbAuthor.Text


what you want to assign is the numeric Id of the author that is in the ValueMember. So you need to access the ValueMember of the selected item, try

cmd.Parameters.Add("@auID", SqlDbType.VarChar).Value = cmbAuthor.SelectedValue 


这篇关于Vb.net显示将数据保存到SQL Server时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆