Sha*_*pta 8 c# ado.net sql-server-2005 database-connectivity winforms
我想打印SQL Server返回的值.
If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')
BEGIN
INSERT INTO ItemList (ItemName) VALUES('txtItemNamea')
END
ELSE
BEGIN
Print 'Duplicate'
END
Run Code Online (Sandbox Code Playgroud)
此查询将返回受影响的行数或复制行
我想在C#中使用这个Duplicate 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);
Run Code Online (Sandbox Code Playgroud)
我不知道怎么dr
用来做这件事.请帮我打印复制件
MessageBox.Show(DR);
我需要做什么?
迟了几年但你应该能够通过将一个事件处理程序附加到SqlConnection对象上的InfoMessage事件来检索打印/信息文本(就像最初要求的那样) -
但是,如果您不能(出于某种原因)使用此线程中提到的替代方法,则只执行此操作.
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
}
Run Code Online (Sandbox Code Playgroud)
使用 ADO.NET,有四个选项可用于从 SQL 查询返回信息:
这些都是从命令对象调用的方法。
给猫剥皮有很多不同的方法,您可以使用输出参数,可以使用 ExecuteScalar,可以使用返回值,也可以使用虚拟记录集。
您应该能够在 C# 中执行类似以下操作来从查询中获取返回值
// add a new parameter, with any name we want - its for our own use only
SqlParameter sqlParam = com.Parameters.Add("@ReturnValue", SqlDbType.Int);
// set the direction flag so that it will be filled with the return value
myParm.Direction = ParameterDirection.ReturnValue;
Run Code Online (Sandbox Code Playgroud)
上面的代码捕获您可以根据需要设置的返回值,可能使用 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
Run Code Online (Sandbox Code Playgroud)
然而,上述建议有一点需要注意 - 我通常要么使用像 Linq-to-SQL 或 NHibernate 这样的 ORM,要么使用存储过程。我发现内联 SQL 相当麻烦。因此,虽然我的答案总体上应该是合理的,但您可能需要处理一些细节才能使其完全按照您的需要工作。