如何从单个列中选择多个值并将每个结果存储在单独的变量中

时间:2014-04-02 19:37:51

标签: c# asp.net sql

我有一个绑定到SQL数据库的ASP.NET C#Web应用程序。我想查询数据库中的单个列并将结果提取到变量中。

我的数据表如下所示:

Collateral_Code | Collateral_Code_Desc | Code_Type
---------------------------------------------------
5700            |Comml Bldg - Fam5+/Apt| Collateral
5705            |Comml Bldg - Hot/Mot  | Collateral
5710            |Comml Bldg - Hot/Mot  | Collateral

与我正在寻找的更接近的查询是:

SELECT Collateral_Code_Desc 
FROM tblCollateral_Codes 
WHERE Collateral_Code IN ('5700','5705','5710')

我得到的结果是:

Collateral_Code_Desc
---------------------
Comml Bldg - Fam5+/Apt
Comml Bldg - Hot/Mot
Comml Bldg - Hot/Mot

我得到了我要求的价值观,但我不知道如何抓住它们。 我如何获取这些结果值中的每一个,以便它们可以存储在我的Web应用程序中的变量中?

*更新*

好的,我不确定是否需要C#代码和变量,我以为你只需要SQL ...

我用于此应用程序的变量是:

string collCode; 
string collCode2; 
string collCode3;

我在查询中使用以下try块:

con.Open();

    try
    {
        cmd.CommandText = " Select Collateral_Code_Desc FROM tblCollateral_Codes Where Collateral_Code IN ('" + collCode +"', '" + collCode2 + "','" + collCode3 + "')" ;

        cmd.Connection = con;

        SqlDataReader myReader;
        myReader = cmd.ExecuteReader();

        if (!myReader.HasRows)
        {
            lblCollateralCode1.Text = "N/A";
            lblCollLedgerDesc.Text = "Collateral Code not available";
        }
        else
        {
            if (myReader.Read())
            {
                collCodeDesc = myReader.GetString(0);

            }
        }
    }
    catch (SqlException ex)
    {
        Label lblMessage = (Label)Master.FindControl("lblMessage");
        lblMessage.Text = "Error handling the request.  Please contact support";
        LogEvent(new AppException("Failed to do something", ex));
    }
    finally
    {
        con.Close();
    }

我与数据表的连接不是问题。从单列(Collat​​eral_Code_Desc)中获取多个值是我所挣扎的。

3 个答案:

答案 0 :(得分:0)

简单的答案是实施Sql Data Reader

SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
        {
            Console.WriteLine("{0}", reader.GetString(0));
        }

编辑(根据您的编辑):

if (myReader.Read())
        {
            collCodeDesc = myReader.GetString(0);

        }

只读取数据读取器中的一个值并将其存储到变量中。将collCodeDesc放入一个列表并执行一个while循环,以便它将读取它返回的每一行:

while (myReader.Read())
{
    collCodeDesc.Add(myReader.GetString(0));
}

答案 1 :(得分:0)

您是否考虑过使用ORM?实体框架是我想到的第一个:http://www.codeproject.com/Articles/388249/How-to-configure-and-use-Entity-Framework

EF还允许您在需要性能时非常轻松地直接执行SQL操作。

答案 2 :(得分:0)

您有许多选项可以连接到数据库并获取结果。其中一些是:

对于每个选项,您都需要一个连接字符串,它基本上说明了您将C#代码连接到数据库的数据库和用户。它看起来像这样:

// for ADO.NET and indirect for LINQ2SQL
var connectionString = @"Server=sql.server;Database=DatabaseName;User Id=SqlOrWindowsUser;Password=password;";
// for Entity Framework
<add name="ModelEntity" connectionString="metadata=res://*/ModelEntity.csdl|res://*/ModelEntity.ssdl|res://*/ModelEntity.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SomeServer;Initial Catalog=SomeCatalog;Persist Security Info=True;User ID=Entity;Password=SomePassword;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

您可以查看here - www.connectionstrings.com如何构建连接字符串以及它的每个部分的含义。

简短说明:

ADO.NET是低级数据库访问,这意味着您需要自己创建和维护所有内容(打开连接,创建命令,获取结果,关闭连接等) 。引用维基百科关于object relational mapping or short O/R Mapper

  

计算机中的对象关系映射(ORM,O / RM和O / R映射)   软件是一种在两者之间转换数据的编程技术   面向对象编程语言中不兼容的类型系统。

基本上,您在数据库结构的代码(表,过程)中创建一个表示,并填充数据库中的数据,以便在您习惯的时候使用代码中的数据。

代码示例:

使用 ADO.NET 获取您的数据:

var connectionString = @"Server=sql.server;Database=DatabaseName;User Id=SqlOrWindowsUser;Password=password;";
string queryString = @"SELECT Collateral_Code_Desc 
                        FROM tblCollateral_Codes 
                        WHERE Collateral_Code IN ('5700','5705','5710');";
var result = new List<String>();
using (var connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    // connect to the database
    connection.Open();
    // execute the query
    SqlDataReader reader = command.ExecuteReader();
    try
    {
        while (reader.Read())
        {
            result.Add(reader[0].ToString());
        }
    }
    finally
    {
        reader.Close();
    }
}

使用 LINQ2SQL 获取您的数据:

// assuming you have created a DBML file and added your tblCollateral_Codes table
var connectionString = System.Configuration.ConfigurationManager.AppSettings("linq2sqlConnectionString");
using (var db = new CollateralDatabase(connectionString))
{
    // result is a list of strings, holding in this case 'Comml Bldg - Fam5+/Apt' and so on...
    var result = db.Table
                    .Select(tblCollateral_Codes_Entity => tblCollateral_Codes_Entity.Collateral_Code_Desc)
                    .ToList();
}

MSDN Walkthrough向您展示如何使用 Visual Studio 中的 O / R Designer 连接到数据库并将表添加到项目中。

此操作的实体框架代码实际上看起来与 LINQ2SQL 完全相同,而不是创建 DBML 文件EDMX 文件。

每个选项都有许多优点和/或缺点,但如果有这样的答案,讨论它们就超出了范围。