连接到SQL Server数据库

铝2110

.NET应用程序,通过该应用程序进行连接并按以下方式执行查询(包装在try-catch块中):

using (SqlConnection conn = new SqlConnection(Configuration.connectionString))
{
    SqlCommand cmd = new SqlCommand(createTransactionQuery,conn);
    conn.Open();
    return cmd.ExecuteNonQuery();
}

查询字符串为:

createTransactionQuery = "BEGIN " +
                         "BEGIN Transaction" +
                         "  BEGIN TRY " +
                         "      --variables" +
                         "      DECLARE @varStaffID int;" +
                         "      DECLARE @varProductID int;" +
                         "      SET @varStaffID = " + transaction.getStaff().getID() + ";" +
                         "      SET @varProductID = " + transaction.getProduct().getProductID() + ";" +
                         " " +
                         "      --New record in Transactions table " +
                         "      INSERT INTO Transactions (Timestamp_, CustomerID, StaffID, ProductID) " +
                         "      VALUES (SYSDATETIME(),NULL,@varStaffID,@varProductID; " +
                         " " +
                         "      --Update inventory (Products table)" +
                         "      --First retrieve the current quantity of this product" +
                         "      DECLARE @varCurrQuantity int; " +
                         "      SET @varCurrQuantity = (SELECT Quantity FROM Products WHERE ProductID=@varProductID); " +
                         "      --and update it" +
                         "      UPDATE Products " +
                         "      SET Quantity = @varQuantity-1 " +
                         "      WHERE ProductID = @varProductID; " +
                         "  END TRY " +
                         "  BEGIN CATCH " +
                         "      ROLLBACK Transaction " +
                         "  END CATCH " +
                         "COMMIT Transaction" +
                         "END";

此代码引发异常:

System.Exception:'BEGIN'附近的语法不正确。

我知道可以更好的方式创建查询字符串。但是,我想知道问题的原因是什么,因为当在SQL Server Management Studio本身中执行此确切查询时,它就会起作用。

我已确保连接字符串正确,因为它在应用程序的其他部分完全可以正常工作。

错误的Akbari

似乎您在这里缺少右括号:

VALUES (SYSDATETIME(),NULL,@varStaffID,@varProductID; " 

但是,这种字符串连接容易受到SQL Injection攻击的影响。您应该始终使用参数化查询来避免SQL注入并摆脱此类错误。

要了解如何使用参数化查询,请参见以下示例:

https://stackoverflow.com/a/50597820/2946329

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从浏览器中的JavaScript连接到SQL Server数据库?

如何在SQL Server Management Studio中连接到本地数据库?

无法使用JDBC连接到Sql Server数据库

从PowerShell连接到SQL Server数据库

如何从Windows 10 UWP应用连接到SQL Server数据库

将R连接到SQL Server数据库引擎

C#通过Azure混合连接连接到SQL Server数据库

从Spark连接到SQL数据库

C#-连接到数据库并使用SQL Server存储过程插入数据

在Ubuntu上使用isql连接到MS SQL Server数据库

创建数据库后无法连接到Microsoft SQL Server数据库(“系统找不到指定的文件”)

将SQL Server连接到ASP.NET MVC中的Azure数据库

将SQL Server连接到ASP.NET MVC中的Azure数据库

无法通过Docker连接到SQL Server数据库

尝试连接到SQL Server数据库时出错

SQL Server 2008 R2无法连接到Management Studio中的本地数据库

从Visual Studio 2013连接到SQL Server 2008 R2数据库

在线连接到SQL Server CE数据库

SQL Server数据库连接问题

连接到SQL Server;连接到同一数据库的两个网站

如何连接到SQL Server数据库以运行某些查询?

SQL Server连接到网络中的数据库

如果知道Java连接设置,则连接到SQL Server数据库

连接到SQL数据库

安全连接到远程 SQL Server 数据库的方法

使用 sequelize 连接到本地 SQL Server 数据库

无法将 Visual Studio 连接到 SQL Server 数据库

在 Mac 上使用 isql 连接到 MS SQL Server 数据库

无法使用 codeigniter 连接到 SQL SERVER 数据库