2010-06-16 34 views
1

堆栈溢出C#表适配器实际返回什么?

我正在处理一个操作Windows窗体应用程序中的SQL表的应用程序。到目前为止,我只使用预生成的Fill查询,以及自制的更新和删除查询(它们什么都不返回)。

我感兴趣的是存储单个列('nchar(15)'名称)中单个值的值,尽管我已经很容易地编写了SQL代码以将该值返回给应用程序,但我没有想法它将返回作为

SELECT [Contact First Name] FROM ContactSkillSet 
WHERE [Contact ID] = @CurrentID 

结果可以直接存储为字符串吗?我需要投射吗?调用toString方法?

谢谢!

编辑:有趣的是,以下工作:

String firstName = this.contactSkillSetTableAdapter.GrabFirstName(userKey); 

在Visual Studio数据向导的乐趣,我想。

回答

2

TableAdapter用于填充DataTable。你的示例查询的结果仍然是一个DataTable,但在一行中只有一列。你可以使用这个值。

var adapter = new SomeKindOfTableAdapter(); 
var dataTable = new DataTable(); 

adapter.Fill(dataTable); 

string contactFirstName = (string)dataTable.Rows[0][0]; 

还有其他的方式来获得你的价值,而无需使用表适配器,但:

string query = @"SELECT [Contact First Name] 
       FROM ContactSkillSet 
       WHERE [Contact ID] = @Current"; 

string result; 

using(SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 

    using(SqlCommand command = new SqlCommand(query, conn)) 
    { 
     result = (string)command.ExecuteScalar(); 
    } 
} 
+0

技术上你是对的,但我不知道如果我d鼓励这种方法。 – R0MANARMY 2010-06-16 15:45:24

+0

@ R0MANARMY - 我同意。我增加了另一种我更喜欢的方法。 – 2010-06-16 15:46:50

+0

我已经有了表格适配器,因为我也使用listview在窗体的其他地方显示其他一些数据。一种方法或另一种方法不会被鼓励是否有特定原因? (ala @ R0MANARMY) – 2010-06-16 15:50:59

0

返回单个值的SQL语句称为标量查询。通常情况下,使用COUNT,MAX和MIN等汇总命令的语句属于此类别。像你的例子一样的其他语句也被认为是标量。

基本上,你可以像对待任何其他查询一样对待它。检查是否至少有一行,如果有,则将零行零列转换为适当的数据类型。如果您使用的是强类型数据集,则有一些功能可以使它更容易,但并不是必需的。

2

如果您计划从您的查询返回一个结果,你可以随时使用在SqlCommandExecuteScalar方法,然后将其转换为字符串(见例如在第一个环节,它它转换为Int32,但同样的原理为字符串)。

相关问题