【发布时间】:2017-06-26 14:22:50
【问题描述】:
所以我试图将我的 Select 语句返回到一个变量中。它正在工作,但是它返回了错误的值...
在大多数情况下,它将返回 -7 列的值而不是应有的值。我以为是我的代码,所以我在没有参数的 SQL Server 管理器中尝试了它,得到了几乎相同的结果。
我做错了什么?
这是我的选择语句(如果你不想通过代码):
"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”的单个字符在数据库的任何其他行中,但它返回了 ID -5 行来自这些行ONLY 包含数字的输入。这发生在我的 SQL 查询和应用程序中。
更新:
我不知道问题出在哪里,但我删除了这些表并使用相同的查询重新创建它们,现在没有任何问题......也许最初创建表时是侥幸?
【问题讨论】:
标签: c# sql-server tsql select