SqlException.Message返回错误的消息顺序

时间:2017-09-11 06:36:15

标签: c# sql-server sqlexception

我正在建立一个数据库更新机制,该机制应该运行sql脚本并将其结果插入到更新日志表中。

我正在使用C#来运行我的脚本并动态设置我应该插入更新日志表的sql消息。

如果脚本中有错误,我会捕获它并使用SqlException.Message将其写入消息。

1

我的脚本看起来像这样(数字和箭头实际上不在脚本中):

if (exception != null)
{
    sqlMessage += exception.Message + Environment.NewLine;
    break;
}

为了测试目的,我将“Users”更改为“Users_error”以抛出错误(带箭头的行)。

我期待跟随日志(数字对应于脚本中的数字):

1.   USE [Database]

     IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'dbo' 
                 AND  TABLE_NAME = 'Users'))
     BEGIN
         print('Table exists - proceeding to insert');
     END
     ELSE
     BEGIN
         -- CREATING TABLE
         CREATE TABLE [dbo].[Users](
             [UserId] [int] NOT NULL,
             [UserFullName] [nvarchar](100) NOT NULL,
             [UserName] [nvarchar](100) NOT NULL,
             [UserShortName] [nvarchar](50) NOT NULL,
             [UserLogin] [varchar](50) NOT NULL
         )
2.       print 'Created table'
     END

3.-> IF(EXISTS(SELECT * FROM [Users_error] WHERE UserId = 1 ))
     BEGIN
         print('User exists - nothing to insert');
     END
     ELSE
     BEGIN
         -- INSERTING USER
         INSERT INTO [dbo].[Users]
               ([UserId]
               ,[UserFullName]
               ,[UserName]
               ,[UserShortName]
               ,[UserLogin])
         VALUES  
             (1,'System Administrator','Admin','SA',    'SA')
         print 'Inserted user'
     END

相反,我得到了以下日志:

----- STARTED 2.sql -----
1. Changed database context to 'Database'.
2. Created table
3. Invalid object name 'Users_error'.     
----- FINISHED 2.sql -----

有没有办法让它恢复正常秩序?在整个地方调试带有日志消息的脚本会非常烦人。

谢谢!

1 个答案:

答案 0 :(得分:0)

Invalid object name 'Users_error'编译错误。另外两个是执行消息。批处理的编译在执行之前进行。有关详细信息,请阅读Understanding how SQL Server executes a query