Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#表适配器实际返回什么?_C#_Sql_Winforms - Fatal编程技术网

C#表适配器实际返回什么?

C#表适配器实际返回什么?,c#,sql,winforms,C#,Sql,Winforms,堆栈溢出 我正在开发一个在windows窗体应用程序中操作SQL表的应用程序。到目前为止,我只使用了预生成的填充查询和自制的更新和删除查询(不返回任何内容) 我感兴趣的是存储单个列中单个值的值(“nchar(15)”名称),尽管我已经很容易地编写了将该值返回到应用程序的SQL代码,但我不知道它将以什么形式返回 结果是否可以直接存储为字符串?我需要投吗?调用toString方法 谢谢 编辑:有趣的是,以下作品: String firstName = this.contactSkillSetTabl

堆栈溢出

我正在开发一个在windows窗体应用程序中操作SQL表的应用程序。到目前为止,我只使用了预生成的填充查询和自制的更新和删除查询(不返回任何内容)

我感兴趣的是存储单个列中单个值的值(“nchar(15)”名称),尽管我已经很容易地编写了将该值返回到应用程序的SQL代码,但我不知道它将以什么形式返回

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

谢谢

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

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”。注意到了,谢谢。