【问题标题】:Is there a cleaner way to insert this data into a SQL row? [duplicate]有没有更简洁的方法将此数据插入 SQL 行? [复制]
【发布时间】:2016-09-30 20:30:41
【问题描述】:

编辑: 问题被标记为重复。我正在寻找是否有更简洁的方法将数据插入 SQL,而不是如何插入。

原件: 正如标题所说,你能想出一种更简洁的方法来将这些数据插入到 SQL 中吗?

cntcn.Open()
Dim nsrtCmnd As String = ("INSERT INTO SQLTable1 (Column1, Column2, Column3,
                        Column4, Column5, Column6, Column7, Column8) 
                        VALUES ('" & Data1 & "','" & Data2 & "','" & Data3 & "','" & Data4 & "',
                        '" & Data5 & "','" & Data6 & "','" & Data7 & "','" & Data8 & "');
SELECT SCOPE_IDENTITY()")
Dim qry As New SqlCommand(nsrtCmnd, cntcn)
Dim rslt As Integer = CInt(qry.ExecuteScalar())
sqlID = rslt
cntcn.Close()

【问题讨论】:

  • 是的,您可以在 sql server 中编写存储 Proc,然后使用 vb.net 插入
  • 是的,使用Prepared Statements!!!
  • 很难想象更糟糕的方式。
  • @Plutonix 感谢您的无用评论!
  • 感谢研究不足的问题。 20,226+ posts regarding db 使用 VB 或 C# 插入(更不用说 MSDN 示例)

标签: sql-server vb.net


【解决方案1】:

我会创建一个存储过程。

CREATE PROCEDURE [dbo].[MyStoredProcedure]
    @Column1 nvarchar(200),
    @Column2 nvarchar(200),
    @Column3 nvarchar(200),
    @Column4 nvarchar(200),
    @Column5 nvarchar(200),
    @Column6 nvarchar(200),
    @Column7 nvarchar(200),
    @Column8 nvarchar(200),
    @outparm int output
AS
    insert SQLTable1 
        (Column1, Column2, Column3, Column4, 
         Column5, Column6, Column7, Column8)  
        values
        (@Column1, @Column2, @Column3, @Column4, 
         @Column5, @Column6, @Column7, @Column8) 
    select @outparm = SCOPE_IDENTITY()

然后通过以下方式调用它:

Dim command As New SqlCommand("MyStoredProcedure", cntcn)
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add("@Column1", Data1);
command.Parameters.Add("@Column2", Data2);
command.Parameters.Add("@Column3", Data3);
command.Parameters.Add("@Column4", Data4);
command.Parameters.Add("@Column5", Data5);
command.Parameters.Add("@Column6", Data6);
command.Parameters.Add("@Column7", Data7);
command.Parameters.Add("@Column8", Data8);
Dim parmout = new SqlParameter("@outparm", SqlDbType.Int);
parmout .Direction = ParameterDirection.Output;
command.Parameters.Add(parmout);

command.ExecuteNonQuery()

result = parmout.Value

【讨论】:

  • 您忘记将最后一个参数添加到参数集合中......也许忽略了?
  • 是的,完全错过了。我已经更新了答案!
  • 太棒了。感谢您的帮助!
  • @ChrisSteele - 谢谢你的回答。我已经设法将我的命令切换到存储过程并且它们工作得很好。但是,是什么让这种方法更好?可读性还是服务器上的负载更少?再次感谢
  • 这里讨论了存储过程的好处:stackoverflow.com/questions/17307871/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2018-07-25
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多