繁体   English   中英

C#与SQL查询结果转换为变量

[英]C# with sql query result to variable

我是C#的新手,所以也许我没有正确写过它。

在我的C#表格中,我下了order nr. 成一种形式。 然后在sql检查它。

需要执行以下查询:

  1. 获取OrderIDOrder nr.

  2. 需要检查Order ID是否在[System_Opened_Orders] =已打开订单

  3. 如果订单已打开,则需要在C# Messagebox.Show("Order opened, try again later")运行Messagebox.Show("Order opened, try again later")

  4. 如果未打开,则从order加载数据

SQL查询:


    Declare @OrderID uniqueidentifier
    SET @OrderID = (SELECT m.ID FROM [Agenda].[dbo].[orders] m
    WHERE m.OrderNumber= @sqlordernr)

if EXISTS (SELECT 1 FROM [Agenda].[dbo].[System_Opened_Orders] 
        WHERE Record_ID=@OrderID )
            BEGIN
                  // Tell its opened, need try again later
            END

        ELSE
            BEGIN
                   // Order is not openend, can get custommer data
                   select ID, OrderNumber, CustommerName, CustommerCity
                   FROM [Agenda].[dbo].[orders] where OrderNumber = @sqlordernr
            END

C#代码:

  SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Agenda;Persist Security Info=True;User ID=sa;Password=xxxxxxxx"); conn.Open(); SqlCommand command = new SqlCommand(/*sql query*/, conn); command.Parameters.AddWithValue("@sqlordernr", odernr); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { // if order is opened then Messagebox.Show // if is not opened // String OrderCustommerName = reader.GetString(3).TrimEnd(); // String OrderCustommerCity= reader.GetString(4).TrimEnd(); // lbOrderData.Text = OrderCustommerName + " " + OrderCustommerCity; } } conn.Close(); 

如果“订单已打开”,则无需选择任何内容

IF EXISTS (SELECT 1 FROM [Agenda].[dbo].[System_Opened_Orders] WHERE Record_ID=@OrderID )
BEGIN
    -- Order is not openend, get custommer data
    select ID, OrderNumber, CustommerName, CustommerCity
    FROM [Agenda].[dbo].[orders] where OrderNumber = @sqlordernr
END

然后在代码端; 如果datareader中没有行,则while.Read()将返回false

using (SqlDataReader reader = command.ExecuteReader())
{
    while(reader.Read())
    {
       // String OrderCustommerName = reader.GetString(3).TrimEnd();
       // String OrderCustommerCity= reader.GetString(4).TrimEnd();
       // lbOrderData.Text = OrderCustommerName + " " + OrderCustommerCity;
    }
}

您需要从存储过程中的if语句返回一些内容。 您可以简单地返回一个值

if EXISTS (SELECT 1 FROM [Agenda].[dbo].[System_Opened_Orders] 
    WHERE Record_ID=@OrderID )
        BEGIN
            select 1 
        END
    ELSE
        BEGIN
           -- Order is not openend, get custommer data
           select ID, OrderNumber, CustommerName, CustommerCity
           FROM [Agenda].[dbo].[orders] where OrderNumber = @sqlordernr
        END

现在,您可以通过查看DataReader的FieldCount属性来判断两个结果之间的差异

using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.FieldCount == 1)
        MessageBox.Show("Order open");
    else
    {
        while(reader.Read())
        {
           // String OrderCustommerName = reader.GetString(3).TrimEnd();
           // String OrderCustommerCity= reader.GetString(4).TrimEnd();
           // lbOrderData.Text = OrderCustommerName + " " + OrderCustommerCity;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM