Так что я пытаюсь вернуть оператор Select в переменную. Он работает, однако он возвращает неправильное значение ...Сохранение запроса SQL return select в переменную возвращает неправильное значение
В большинстве случаев оно возвращает значение -7 столбцов, чем оно должно быть. Я думал, что это мой код, поэтому я попробовал его в менеджере SQL-серверов без параметров и получил почти такой же результат.
Что я делаю неправильно?
Вот мой оператор выбора (если вы не хотите, чтобы пройти через код):
"SELECT [Item #] FROM dbo.[" + cmbJobName.Text + "] WHERE [Manufacturer] LIKE @Manufacturer AND [Mill Location] LIKE @MillLocation AND [Product Description] LIKE @ProductDescription AND [Weld Seam Type] LIKE @WeldSeamType AND [Outer Dimension] LIKE @OuterDimension AND [Wall Thickness] LIKE @WallThickness AND [Coating] LIKE @Coating AND [Grade] LIKE @Grade AND [Heat] LIKE @Heat AND [ANSI/ASME] LIKE @ANSIASME AND [Purchase Order] LIKE @PurchaseOrder AND [Standard] LIKE @Standard AND [Notes] LIKE @Notes";
И вот мой код:
try
{
using (SqlConnection con = new SqlConnection(Connection.MTRDataBaseConn))
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT [Item #] FROM dbo.[" + cmbJobName.Text + "] WHERE [Manufacturer] LIKE @Manufacturer AND [Mill Location] LIKE @MillLocation AND [Product Description] LIKE @ProductDescription AND [Weld Seam Type] LIKE @WeldSeamType AND [Outer Dimension] LIKE @OuterDimension AND [Wall Thickness] LIKE @WallThickness AND [Coating] LIKE @Coating AND [Grade] LIKE @Grade AND [Heat] LIKE @Heat AND [ANSI/ASME] LIKE @ANSIASME AND [Purchase Order] LIKE @PurchaseOrder AND [Standard] LIKE @Standard AND [Notes] LIKE @Notes";
cmd.Connection = con;
SqlParameter pManufactuter = new SqlParameter("@Manufacturer", SqlDbType.VarChar, 50);
SqlParameter pMillLocation = new SqlParameter("@MillLocation", SqlDbType.VarChar, 50);
SqlParameter pProductDescription = new SqlParameter("@ProductDescription", SqlDbType.VarChar, 50);
SqlParameter pWeldSeamType = new SqlParameter("@WeldSeamType", SqlDbType.VarChar, 50);
SqlParameter pOuterDimension = new SqlParameter("@OuterDimension", SqlDbType.VarChar, 50);
SqlParameter pWallThickness = new SqlParameter("@WallThickness", SqlDbType.VarChar, 50);
SqlParameter pCoating = new SqlParameter("@Coating", SqlDbType.VarChar, 50);
SqlParameter pGrade = new SqlParameter("@Grade", SqlDbType.VarChar, 50);
SqlParameter pHeat = new SqlParameter("@Heat", SqlDbType.VarChar, 50);
SqlParameter pAnsiAsme = new SqlParameter("@ANSIASME", SqlDbType.VarChar, 50);
SqlParameter pPurchaseOrder = new SqlParameter("@PurchaseOrder", SqlDbType.VarChar, 50);
SqlParameter pStandard = new SqlParameter("@Standard", SqlDbType.VarChar, 50);
SqlParameter pNotes = new SqlParameter("@Notes", SqlDbType.VarChar, 50);
pManufactuter.Value = cmbManufacturer.Text;
pMillLocation.Value = cmbMillLocation.Text;
pProductDescription.Value = cmbProductDescription.Text;
pWeldSeamType.Value = cmbWeldSeamType.Text;
pOuterDimension.Value = cmbOuterDimension.Text;
pWallThickness.Value = cmbWallThickness.Text;
pCoating.Value = cmbCoating.Text;
pGrade.Value = cmbGrade.Text;
pHeat.Value = txtHeat.Text;
pAnsiAsme.Value = cmbANSI.Text;
pPurchaseOrder.Value = txtPurchaseOrder.Text;
pStandard.Value = cmbStandard.Text;
pNotes.Value = txtNotes.Text;
cmd.Parameters.Add(pManufactuter);
cmd.Parameters.Add(pMillLocation);
cmd.Parameters.Add(pProductDescription);
cmd.Parameters.Add(pWeldSeamType);
cmd.Parameters.Add(pOuterDimension);
cmd.Parameters.Add(pWallThickness);
cmd.Parameters.Add(pCoating);
cmd.Parameters.Add(pGrade);
cmd.Parameters.Add(pHeat);
cmd.Parameters.Add(pAnsiAsme);
cmd.Parameters.Add(pPurchaseOrder);
cmd.Parameters.Add(pStandard);
cmd.Parameters.Add(pNotes);
int result = ((int)cmd.ExecuteScalar());
txtReturnFromSelect.Text = result.ToString();
cmd.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
//catch error
MessageBox.Show(ex.Message);
}
ПРИМЕЧАНИЕ
База данных в настоящее время просто состоит из чисел и текстовых строк без пробелов для целей тестирования. Например, я создал одну строку с просто словом «foo» и еще одну строку с просто словом «bar», ни один символ «foo» и «bar» не находится в каких-либо других строках базы данных, но он вернул идентификатор -5 строк из входов. Эти строки ТОЛЬКО содержат номера. Это происходит как в моем SQL-запросе, так и в приложении.
UPDATE:
Я не знаю, что этот вопрос, но я бросил таблицы и переделал их с тем же запросом, и теперь нет никаких проблем ... возможно лапы при создании таблицы изначально ?
Я сделал, и он возвратил то же значение ... При просмотре запроса я не вижу проблемы с ним. – Mokey
Можете ли вы повторить свою проблему на http://sqlfiddle.com/ с некоторыми поддельными данными? – PeteGO
Вчера я получил его для работы с вышеупомянутым ответом, однако sqlfiddle.com разбивает мои браузеры каждый раз, когда я использую его на работе по какой-то причине. – Mokey