2014-06-26 17 views
0

我想更新,其中列名会在文本框中,同时执行将进入一个表的列在文本框中specifed列。以下代码不执行任何操作。 TextBox14包含列名称,TextBox12包含要更新的值。更新从服务器

 Dim squery As String = "SELECT name,days from definedLeave" 
         Dim cmd6 As SqlCommand = New SqlCommand(squery, con) 
         Dim dr6 As SqlDataReader = cmd6.ExecuteReader() 
         Dim i As Integer = 0 
         While dr6.Read() 
          Try 
           s = dr6(i).ToString 
           TextBox14.Text = s 
           a = dr6(i + 1).ToString 
           TextBox12.Text = a 
           Dim sql = "update empLeave set " & TextBox14.Text.Trim & "[email protected] where epid='" + txtCode.Text + "'" 

           Using com7 = New SqlCommand(sql, con) 
            com7.Parameters.AddWithValue("@na", TextBox12.Text) 
            com7.ExecuteNonQuery() 
           End Using 
          Catch ex As Exception 
     MsgBox("HELLO") 
    End Try 
         End While 
         com7.Dispose() 
         dr6.Close() 

回答

0

不幸的是,参数只能用于数值,不是标识符。它们就像VB中的变量 - 你不能用一个变量的内容来代表VB中的另一个变量。

愚蠢的是,你试图使用一个参数,你不能,然后在哪里可以,对于epid值,你使用字符串连接。你的代码应该是这个样子:

Dim sql = "UPDATE empleave SET [" & TextBox14.Text & "] = @na WHERE epid = @epid" 

Using com7 = New SqlCommand(sql, con) 
    com7.Parameters.AddWithValue("@na", TextBox12.Text) 
    com7.Parameters.AddWithValue("@epid", txtCode.Text) 

    com7.ExecuteNonQuery() 
End Using 

这仍然留下你虽然打开SQL注入,所以你应该绝对确保你第一次验证列名。实际上,你应该做的是查询数据库以获取列名,然后将它们放入ComboBox。这样你可以保证用户将选择一个有效的值。

+0

@ jimcilhinney格式不起作用。实际上,我已经从另一个表中取得内容作为该表的列名。我已经用完整的代码编辑了代码部分。请检查 – user3774245

+0

也许你可能比“不起作用”更具体一些。当你已经知道实际发生的事情时,我们猜测它是没有意义的。错误消息不提供有趣的;他们是为了获取信息。 – jmcilhinney

+0

我没有收到任何错误,但表格没有更新 – user3774245

0

尝试这样

Dim sql as string= "update empLeave set " & TextBox14.Text.Trim & "[email protected] where 
epid='" + txtCode.Text + "'" 

    Using com7 = New SqlCommand(sql, con) 
     com7.Parameters.AddWithValue("@na", TextBox12.Text) 
     com7.ExecuteNonQuery() 
    End Using 
+0

我尝试了上面的代码,但它的工作。表没有得到更新,dosent得到任何错误信息。 – user3774245

+0

你检查了你的查询吗?发布您的查询 – Sathish

+0

Dim sql =“update empLeave set”&TextBox14.Text.Trim&“= @ na where epid ='”+ txtCode.Text +''“ 使用com7 =新建SqlCommand(sql,con) com7。 Parameters.AddWithValue(“@呐”,TextBox12.Text) com7.ExecuteNonQuery() 结束检查的字符串返回分配在SQL – user3774245