堆叠溢出!
我正在开发一个在Windows窗体应用程序中操作SQL表的应用程序。到目前为止,我只使用预先生成的填充查询,以及自制的更新和删除查询(不返回任何内容)。
我感兴趣的是存储单个列中的单个值('nchar(15)'名称),虽然我已经轻松编写了SQL代码以将该值返回给应用程序,但我不知道将作为返回的内容。
SELECT [Contact First Name] FROM ContactSkillSet
WHERE [Contact ID] = @CurrentID
结果可以直接存储为字符串吗?我需要施展吗?调用toString方法?
谢谢!
编辑:有趣的是,以下工作:
String firstName = this.contactSkillSetTableAdapter.GrabFirstName(userKey);
我想,Visual Studio数据向导的乐趣。
答案 0 :(得分:2)
如果您打算从查询中返回单个结果,则可以始终在ExecuteScalar类上使用SqlCommand方法,然后将其强制转换为字符串(请参阅第一个链接中的示例,将其强制转换为对于一个Int32,但字符串的原理相同。)
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
返回单个值的SQL语句称为标量查询。通常,使用COUNT,MAX和MIN等聚合命令的语句属于此类别。像你的例子这样的其他陈述也被认为是标量。
基本上你可以像对待任何其他查询一样对待它。检查是否至少有一行,如果有,则将行零列零转换为适当的数据类型。如果您使用强类型数据集,则有一些功能可以使这更容易,但不需要这样做。