C#& SQL Server存储过程不会返回结果

时间:2015-12-10 18:58:58

标签: 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) 
            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#代码调用它时,它不会将结果返回给数据表。

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());
}

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

2 个答案:

答案 0 :(得分:1)

我会使用.Fill with DataAdapter

请看这个......

DataTable.Load(FbDataReader) does not load everything into DataTable

答案 1 :(得分:1)

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

DataTable.Load这是一个非常古老的问题,并没有很好的记录。一般情况SQLDataAdapter适用于DataTable