简体   繁体   English

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

[英]C# with sql query result to variable

I'm new in C#, so maybe i didn't wrotte it correctly. 我是C#的新手,所以也许我没有正确写过它。

In my C# form, i put order nr. 在我的C#表格中,我下了order nr. into a form. 成一种形式。 Then it check this in sql . 然后在sql检查它。

need to execute this query: 需要执行以下查询:

  1. Get OrderID from Order nr. 获取OrderIDOrder nr.

  2. Need to check if Order ID is in [System_Opened_Orders] = order is opened 需要检查Order ID是否在[System_Opened_Orders] =已打开订单

  3. If order is opened, then need to run in C# Messagebox.Show("Order opened, try again later") 如果订单已打开,则需要在C# Messagebox.Show("Order opened, try again later")运行Messagebox.Show("Order opened, try again later")

  4. If is not opened, load data from order 如果未打开,则从order加载数据

SQL query: 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# code: 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(); 

You don't need to select anything if "order is opened" 如果“订单已打开”,则无需选择任何内容

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

And then at code side; 然后在代码端; if there is no row at datareader, while.Read() will return false 如果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;
    }
}

You need to return something from your if statement inside the stored procedure. 您需要从存储过程中的if语句返回一些内容。 You can simply return a single value 您可以简单地返回一个值

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

Now you can tell the difference between the two results looking at the property FieldCount of the DataReader 现在,您可以通过查看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