【发布时间】:2015-07-31 07:47:23
【问题描述】:
我开发了一个连接到 SQL Server 2014 的 vb.net 应用程序。在服务器端,我创建了以下存储过程,以便在 vb 应用程序调用时向表中插入一行。
create procedure uspInsertToTableWith1Value
@table nvarchar(50),
@column nvarchar(50),
@value nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
declare @SQL nvarchar(50)
select @SQL = N'INSERT INTO ' + QUOTENAME(@table) + ' (' + @column + ') ' + 'VALUES (' + @value + ')';
EXEC sp_executesql @SQL
END
vb 应用有一个按钮,代码如下:
Private Sub Button22_Click(sender As System.Object, e As System.EventArgs) Handles Button22.Click
Dim tbl1 = "Facility"
Dim cln1 = "f1"
Dim vl1 = TextBox7.Text
InsertToTableWith1Value(tbl1, cln1, vl1)
end sub
这是连接到 SQL Server 的 sub:
Public Sub InsertToTableWith1Value(tbl, cln, vl)
Try
Dim cmd As New SqlCommand
cmd.Connection = con
cmd.CommandText = "uspInsertToTableWith1Value"
cmd.CommandType = CommandType.StoredProcedure
With cmd.Parameters
.AddWithValue("@table", tbl)
.AddWithValue("@column", cln)
.AddWithValue("@value", vl)
End With
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Catch ex As Exception
con.Close()
MsgBox(ex.Message)
End Try
End Sub
问题是当我通过 vb 应用程序向表中添加新记录时,它只接受数字。当我添加字符或带有字符的数字时,它会删除所有头部数字,只留下剩余的字符并给出两个异常错误,具体取决于我输入的内容。例如,如果我输入“2ww”,我会得到“'ww' 附近的语法错误”。如果我输入“ww”,我会得到“Invalid column name 'ww'”。
知道如何解决这个问题吗?我已经花了两天时间在网上搜索。感谢所有帮助我的人。
顺便说一句,如果我手动直接通过服务器添加行,它会接受所有内容,这没关系。
我听从了你们给我的所有建议,所以这是我的最终代码,它运行良好: (我真的希望把这最后一句话贴在正确的地方)
Public Sub InsertToTableWith1Value(tbl, cln, vl)
Try
Dim cmd As New SqlCommand
cmd = New SqlCommand("INSERT [" & tbl & "] (" & cln & ") VALUES ('" & vl & "')", con)
With cmd.Parameters
.AddWithValue("@table", tbl)
.AddWithValue("@column", cln)
.AddWithValue("@value", vl)
End With
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Catch ex As Exception
con.Close()
MsgBox(ex.Message)
End Try
End Sub
【问题讨论】:
-
为什么该存储过程甚至存在?这就像你试图通过重新实现 SQL 来避免 SQL,非常糟糕。如果您要允许应用程序拥有将数据插入任何表的任何列的完全访问权限,只需让它运行 ad-hoc
INSERTs 并完成它。 -
嗯,你是对的,但由于我是 SQL Server 新手,我创建这个存储过程只是为了我的学习目的。
标签: sql-server vb.net stored-procedures