【发布时间】:2016-07-10 16:08:54
【问题描述】:
我正在使用 tableadapter 使用 ODBC 查询数据库。查询是由 VS2015 查询生成器创建的。如果我使用可变参数创建 SQL 语句,则结果将返回空白。如果我用硬编码参数替换参数(问号),那么结果会很好。下面是我的代码,结果返回空白的示例。
SQL 语句:
SELECT HPD_Help_Desk.Incident_Number, HPD_Help_Desk.Assigned_Group
FROM HPD_Help_Desk HPD_Help_Desk
WHERE (HPD_Help_Desk.Incident_Number > 'INC100000230000')
AND (HPD_Help_Desk.Assigned_Support_Organization LIKE '%?%')
我已使用参数集合编辑器设置参数成员详细信息,并将 DbType 设置为 String,这会将 ProviderType 默认为 NVarChar。其余字段我保持原样。
默认.aspx.cs:
public partial class Incidents : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string s = "Copenhagen POD";
HPD_Help_DeskTableAdapter incidentsAdapter = new HPD_Help_DeskTableAdapter();
GridView1.DataSource = incidentsAdapter.GetIncidentsByAssigned_Support_Organization(s);
GridView1.DataBind();
}
}
默认.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" inherits="Incidents" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Incidents</h1>
<p>
<asp:GridView ID="GridView1" runat="server" CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
那么我错过了什么?使用我在 Default.aspx.cs (Copenhagen POD) 中指定的参数,我应该进行哪些更改才能使 SQL 语句正常工作?
【问题讨论】:
-
只是猜测:语句应该是
... LIKE ?),你的参数值应该是%<yourvalue>%。我认为 ODBC 不会在'..'中使用问号作为参数占位符。 -
我听从了您的建议,但是在完成 TableAdapter 查询配置向导以及尝试构建解决方案时,我得到了“不存在从 DbType 对象到已知 OdbcType 的映射”错误。
-
看不到您设置参数的位置。所以我一直在猜测:你可以将参数的
DbType属性设置为DbType.String(实际上应该是默认值,但无论如何)。 -
我正在使用参数集合编辑器设置参数。根据您的建议,参数 DbType 将自身设置为 Object 从而给出错误。我再次打开参数集合编辑器,看到更多字段已自动填充,所以我继续将 DbType 从 Object 更改为 String,现在它可以工作了。因此,它使用了您的建议并对 DbType 进行了额外的更改,从而解决了我的问题。如果您写下您的第一条评论作为对我问题的回答,那么我可以选择它作为正确答案,并给予您应得的荣誉。
标签: c# sql asp.net odbc parameter-passing