Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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#&;SQL Server存储过程不支持';t返回结果_C#_Sql Server_Tsql - Fatal编程技术网

C#&;SQL Server存储过程不支持';t返回结果

C#&;SQL Server存储过程不支持';t返回结果,c#,sql-server,tsql,C#,Sql Server,Tsql,我试图从数据库中获取一个zip文件,我编写了一个存储过程,如下所示 [dbo].[p_SearchZipLocal] @zip nvarchar(10) = NULL, @city nvarchar(100) = null AS BEGIN SET NOCOUNT ON; BEGIN -- Verifica se o zip aparece na primeira coluna IF((SELECT COUNT(cttzip)

我试图从数据库中获取一个zip文件,我编写了一个存储过程,如下所示

[dbo].[p_SearchZipLocal]
    @zip nvarchar(10) = NULL,
    @city nvarchar(100) = null
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN
        -- Verifica se o zip aparece na primeira coluna
        IF((SELECT COUNT(cttzip) 
            FROM seur 
            WHERE cttzip = @zip) > 0)
        BEGIN
            -- Verifica se o valor é NA, se não for devolve o zip e a localidade correcta
            IF((SELECT TOP(1) [SubCity1] as city 
                FROM seur 
                WHERE cttzip = @zip) = '#N/A')
            BEGIN
                -- Se for NA vamos ter de pesquisar na quinta coluna pela localidade
                IF((SELECT count(*) FROM seur WHERE subCity2 LIKE @city + '%' )>0)
                    -- Se encontrar-mos devolvemos o novo zip
                    SELECT TOP(1) 
                        '0' AS Error, subZip2 as zip, subCity2 AS city 
                    FROM seur 
                    WHERE subCity2 LIKE @city + '%'
                ELSE
                    SELECT 
                        '2' AS Error, 'Erro' AS zip, 'Erro' AS city
                END
            ELSE
                SELECT TOP(1) 
                    '0' AS Error, cttzip AS zip, [SubCity1] as city 
                FROM seur 
                WHERE cttzip = @zip
        END
    ELSE
        SELECT '1' AS Error, 'Erro' AS zip, 'Erro' AS city
    END
END
从SQL Server执行时返回结果,如下所示:

0   9900    AEROPORTO DA HORTA
但是当我从C#代码调用它时,它不会将结果返回到datatable

using (SqlCommand cmd = new SqlCommand("p_SearchZipLocal", connectionSQL))
{
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("@zip", SqlDbType.VarChar).Value = "9900";
    cmd.Parameters.Add("@city", SqlDbType.VarChar).Value = "PRAIA DO ALMOXARIFE";

    connectionSQL.Open();

    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader());
}

此代码获取返回中的列名,但没有关联的值。谁能告诉我我的代码哪里错了吗?

我会用。用DataAdapter填充

请看这个


数据表.Load方法要求基础数据中有一个主键列(即来自DataReader)。看起来您的过程没有任何主键列,或者如果您有主键列,请在sql语句中使用
order by
,并尝试将其保留为第一列,以便
DataTable
能够将其接受为主键


这是DataTable.Load的一个非常老的问题,没有很好的文档记录。一般来说,
SQLDataAdapter
DataTable
配合良好,但问题仍然存在。我想数据不会从sql存储过程->C传递过来,你能试试这样吗?//注释掉dt.Load(cmd.ExecuteReader());然后添加:SqlDataReader myReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);while(myReader.Read()){Console.WriteLine(myReader[“city”];}myReader.Close();每一点提示都能解决。感谢您的帮助小提示,在您的
if
检查中,不要执行
>0
TOP(1)…=使用
存在(
这将导致更快的查询。另外,您的
选择顶部(1)
部分我认为是错误的,您正在做一个顶部1,但没有顺序,这可能是错误的。您可能希望在那里存在另一个位置(我在链接的示例中这样做了)您的代码运行良好,并进行了一些微调。感谢您的帮助我不确定问题是否与不返回主键直接相关,但这是我添加到最终解决方案中的内容之一。感谢您的帮助