Я пытаюсь получить почтовый индекс из базы данных, и я написал хранимую процедуру, как этотC не возвращает результаты
[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());
}
Этот код получает имена столбцов в обратном, но нет никакого значения. Может ли кто-нибудь сказать мне, где мой код неправильный?
Маленький совет, в ваших 'if' проверках, вместо того, чтобы делать'> 0' или 'TOP (1) ... =' use 'Exists (' это приведет к более быстрым запросам. [Вот ваш переведённый код переписан использовать его] (https://gist.github.com/anonymous/acf29262b062f9071965). Также ваш раздел 'SELECT TOP (1)', который, я думаю, ошибочен, вы делаете верхнюю 1 без порядка, по которой, вероятно, будет ошибка Вы, вероятно, хотели, чтобы там существовал другой (что я сделал в примере, к которому я привязался) –
Ваш код работал хорошо с некоторой тонкой настройкой. Спасибо за помощь – Lucky