我试图从数据库中获取一个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());
}
此代码获取返回中的列名,但没有关联的值。谁能告诉我我的代码在哪里错了?
答案 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
。