如何用C#获取SQL的返回消息

ymymym16888 2012-04-16 07:33:34
如下SQL语句:
RESTORE VERIFYONLY FROM DISK='D:\MyDB.BAK'
在SQL的查询分析器中执行,无异常时返回消息"文件 1 上的备份集有效。"
用C#编程执行,不知如何接收SQL返回的消息
...全文
597 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
adiddas 2013-12-18
  • 打赏
  • 举报
回复
引用 4 楼 qldsrx 的回复:
[Quote=引用 1 楼 的回复:] 参考 http://www.cnblogs.com/icwin/articles/1285657.html http://www.cnblogs.com/hopeless/archive/2008/08/21/1273469.html [/Quote] 完全不相关的两个链接 正确的做法如下:
var conn = new SqlConnection("");
conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage);
using (var cmd = conn.CreateCommand())
{
    cmd.CommandText = "Print 1";
    cmd.ExecuteNonQuery();
}
        void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e)
        {
            MessageBox.Show(e.Message); 
        }
VB代码:

Private Shared SQLCMD As SqlCommand
Private Shared SQLConn As SqlConnection
Private Shared SQLMessage As String = String.Empty
    Public Shared Sub OpenConnection(ByRef conn As SqlConnection)
        Try
            If (conn.State = ConnectionState.Open) Then
                Return
            Else
                conn.Open()
                SQLConn = conn
                'SQLConn.InfoMessage += New SqlInfoMessageEventHandler(conn_InfoMessage)
                AddHandler SQLConn.InfoMessage, New SqlInfoMessageEventHandler(AddressOf conn_InfoMessage)
                SQLCMD = conn.CreateCommand()
                SQLCMD.CommandTimeout = 1000
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
    Private Shared Sub conn_InfoMessage(ByVal sender As Object, ByVal e As SqlInfoMessageEventArgs)
        SQLMessage = e.Message
    End Sub
使用找个SQLConn连接执行完sql语句后直接取SQLMessage就可以了:

SQLCMD.CommandText="print 'TestMessage'"
SQLCMD.ExecuteNonQuery()
Messagebox.show(SQLMessage)
ymymym16888 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
我晕,你的VS什么版本啊,我这个是VS2010下面调试过的,标准C#代码,JAVA不会。
[/Quote]

我用的是VS2005
敲個var進行,編輯器不認識
不解 2012-04-17
  • 打赏
  • 举报
回复
定义过程:
DECLARE @fname nvarchar(500)
SET @fname = 'D:\MyDB.BAK'
BEGIN TRY
RESTORE VERIFYONLY FROM DISK = @fname
PRINT 'ss'
END TRY
BEGIN CATCH
PRINT 'err'
END CATCH
在c#中获取返回值处理。
qldsrx 2012-04-17
  • 打赏
  • 举报
回复
我晕,你的VS什么版本啊,我这个是VS2010下面调试过的,标准C#代码,JAVA不会。
ymymym16888 2012-04-17
  • 打赏
  • 举报
回复
qldsrx
你的方法可行,不過你給的代碼好像是JAVA的
test2050 2012-04-17
  • 打赏
  • 举报
回复
cmd.ExecuteNonQuery();
好像会返回值吧,直接判断是否正常返回
if(cmd.ExecuteNonQuery()) msgbox("文件 1 上的备份集有效。");

参考
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
qldsrx 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

参考
http://www.cnblogs.com/icwin/articles/1285657.html

http://www.cnblogs.com/hopeless/archive/2008/08/21/1273469.html
[/Quote]
完全不相关的两个链接

正确的做法如下:
var conn = new SqlConnection("");
conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage);
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "Print 1";
cmd.ExecuteNonQuery();
}

        void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
MessageBox.Show(e.Message);
}
ymymym16888 2012-04-17
  • 打赏
  • 举报
回复
頂起來,別沉了
這問題相信也會有別人碰到的
ymymym16888 2012-04-16
  • 打赏
  • 举报
回复
Chinajiyong,我看了你给的链接
你的方法可以得知提交的SQL是否执行成功
但跟我的要求还有点出入,因为提交的SQL语句执行后,返回的消息有时是不同的
我需要知道返回的消息,以便我编程时做相应处理
仅仅知道提交的SQL是否执行成功还不够

还是感谢你的参考

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧