我有一个绑定到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();
}
我与数据表的连接不是问题。从单列(Collateral_Code_Desc)中获取多个值是我所挣扎的。
答案 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="Data Source=SomeServer;Initial Catalog=SomeCatalog;Persist Security Info=True;User ID=Entity;Password=SomePassword;MultipleActiveResultSets=True"" 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 文件。
每个选项都有许多优点和/或缺点,但如果有这样的答案,讨论它们就超出了范围。