2010-01-08 35 views
8

我想打印由SQL Server返回的值。如何在消息框中显示由sql查询打印的值

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama') 
    BEGIN 
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    END 
ELSE 
    BEGIN 
    Print 'Duplicate' 
    END 

这个查询或者返回我行的任一数量的影响或重复

我想用这个复制在C#中MessageBox.Show()

string query1 = "If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemName') BEGIN INSERT INTO ItemList (ItemName) VALUES('txtItemName') END ELSE BEGIN Print 'Duplicate' END"; 
      SqlCommand cmd = new SqlCommand(query1, conn); 
      SqlDataReader dr; 
      conn.Open(); 
      dr=cmd.ExecuteReader(); 
      conn.Close(); 
MessageBox.Show(dr); 

我不知道该怎么使用dr来做到这一点。请帮我出印刷复制这里

MessageBox.Show(DR);

什么我需要在这里做什么?

+2

如果你使用select语句而不是打印这个会更好 – Brij 2010-01-08 12:20:06

+0

@Brij你可以给我一个eg。虽然我更感兴趣的是在前端捕获这个值,但是还有很多方法可以做同样的事情,比如光标和存储过程,派生表以及更多 – 2010-01-08 12:28:14

回答

1

使用ADO.NET有用于从SQL查询返回的信息四个选项:

  • 使用DataSet对象收集返回的行,除了返回值和返回这些行工作参数。
  • 使用DataReader对象收集返回的行,遍历这些行,并收集返回值和返回参数。
  • 使用ExecuteScalar方法从结果中第一行与返回值和返回参数的第一列返回值。这对于聚合函数非常有用。
  • 使用ExecuteNonQuery方法仅返回返回参数和返回值。任何返回的行都将被丢弃。这对执行动作查询非常有用。

这些都是从你的命令对象调用的方法。

有很多不同的方法对皮肤一只猫,你可以使用输出参数,你可以使用的ExecuteScalar,您可以使用返回值,也可以使用虚拟的记录。

您应该能够像在C#以下从查询得到的返回值

的捕获上面的代码,你可以用一组,因为你需要,也许是返回值0表示存在,1表示不存在。

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')  
    BEGIN  
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    Return 0;  
    END  
ELSE  
    BEGIN  
    Return 1;  
    END 

有一点需要注意上述意见不过 - 我通常要么使用ORM像LINQ到SQL或NHibernate的,或我使用存储过程。我发现内联SQL非常繁琐。所以,虽然我的答案一般来说应该是合理的,但您可能需要完成一些细节以使其完全按照您的需要工作。

+0

即使我不使用内联代码,我只是想清除我的概念以捕获在前端检索'打印'值,否则我使用存储过程 – 2010-01-08 13:31:05

7

几年晚,但你应该能够通过SqlConnection对象上附加一个事件处理程序的InfoMessage event检索打印/信息文本(如最初要求) -

但如果你可以”只能这样做t (出于某种原因)使用本主题中提到的替代方法。

static void Main(string[] args) 
{ 
    using (SqlConnection connection = new SqlConnection(@"someconnectionstring")) 
    { 
     connection.Open(); 
     using(SqlCommand command = new SqlCommand("test", connection)) 
     { 
      connection.InfoMessage += new SqlInfoMessageEventHandler(connection_InfoMessage); 
      using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); // Do something with DataTable 
      } 
     } 
    } 
} 

static void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
{ 
    // e contains info message etc 
} 
+0

如果我有条件查询就像真正的打印插入否则假然后打印'无法打印'和这个事件获得所有消息否则如果真或假 – user2491383 2014-02-09 10:55:30