C#表适配器实际返回什么?
堆栈溢出 我正在开发一个在windows窗体应用程序中操作SQL表的应用程序。到目前为止,我只使用了预生成的填充查询和自制的更新和删除查询(不返回任何内容) 我感兴趣的是存储单个列中单个值的值(“nchar(15)”名称),尽管我已经很容易地编写了将该值返回到应用程序的SQL代码,但我不知道它将以什么形式返回 结果是否可以直接存储为字符串?我需要投吗?调用toString方法 谢谢 编辑:有趣的是,以下作品:C#表适配器实际返回什么?,c#,sql,winforms,C#,Sql,Winforms,堆栈溢出 我正在开发一个在windows窗体应用程序中操作SQL表的应用程序。到目前为止,我只使用了预生成的填充查询和自制的更新和删除查询(不返回任何内容) 我感兴趣的是存储单个列中单个值的值(“nchar(15)”名称),尽管我已经很容易地编写了将该值返回到应用程序的SQL代码,但我不知道它将以什么形式返回 结果是否可以直接存储为字符串?我需要投吗?调用toString方法 谢谢 编辑:有趣的是,以下作品: String firstName = this.contactSkillSetTabl
String firstName = this.contactSkillSetTableAdapter.GrabFirstName(userKey);
我想是VisualStudio数据向导的乐趣吧 返回单个值的SQL语句称为标量查询。通常,使用COUNT、MAX和MIN等聚合命令的语句属于这一类。像您的示例这样的其他语句也被认为是标量语句
基本上,您可以像对待任何其他查询一样对待它。检查是否至少有一行,如果有,则将行0列0强制转换为相应的数据类型。如果您使用的是强类型数据集,则有一些功能可以简化此操作,但不需要这样做。返回单个值的SQL语句称为标量查询。通常,使用COUNT、MAX和MIN等聚合命令的语句属于这一类。像您的示例这样的其他语句也被认为是标量语句
基本上,您可以像对待任何其他查询一样对待它。检查是否至少有一行,如果有,则将行0列0强制转换为相应的数据类型。如果您使用的是强类型数据集,则有一些功能可以简化此操作,但不需要这样做。如果您计划从查询中返回单个结果,则始终可以对类使用该方法,然后将其强制转换为字符串(参见第一个链接中的示例,它将其强制转换为Int32,但对字符串使用相同的原则).如果您计划从查询中返回单个结果,则始终可以对类使用该方法,然后将其转换为字符串(请参见第一个链接中的示例,它将其转换为Int32,但对字符串使用相同的原则)。使用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();
}
}
TableAdapter用于填充数据表。示例查询的结果仍然是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();
}
}
从技术上说你是对的,但我不知道我是否会鼓励这种方法。@r0经理-我同意。我添加了另一种我更喜欢的方法。我已经有了表适配器,因为我还使用listview在表单的其他地方显示一些其他数据。有没有特别的理由不鼓励一种或另一种方法?(ala@R0MANARMY)@Raven Dreamer:一种方法比另一种更能显示意图。当您看到
DataAdapter.Fill
时,通常假定数据库返回一组行。当您看到ExecuteScalar
时,通常假设您得到的是一个值。使您之后处理此代码的人更容易。@r0管理员啊,如果有什么安慰的话,我没有将查询方法命名为“Fill”。注意,谢谢。从技术上说你是对的,但我不知道我是否会鼓励这种方法。@R0MANARMY-我同意。我添加了另一种我更喜欢的方法。我已经有了表适配器,因为我还使用listview在表单的其他地方显示一些其他数据。有没有特别的理由不鼓励一种或另一种方法?(ala@R0MANARMY)@Raven Dreamer:一种方法比另一种更能显示意图。当您看到DataAdapter.Fill
时,通常假定数据库返回一组行。当您看到ExecuteScalar
时,通常假设您得到的是一个值。使您之后处理此代码的人更容易。@r0管理员啊,如果有什么安慰的话,我没有将查询方法命名为“Fill”。注意到了,谢谢。