从asp.net中的视图创建和选择数据没有发生?
Posted
技术标签:
【中文标题】从asp.net中的视图创建和选择数据没有发生?【英文标题】:Creating and selecting data from a view in asp.net not happening? 【发布时间】:2012-12-14 06:22:26 【问题描述】:我正在尝试编写一个视图并从该视图中检索数据,我已经这样做了:
string command = "if OBJECT_ID('try1') IS NOT NULL Drop view try1" +"\n"+"go"+"\n";
command = command + "Create view try1 as select WBSCode,Description,TerritoryCode,AmountReleased,convert(varchar(25),CreatedOn,106) as CreatedOn,IsEnable from WBS where WBSCode like '%" + msrch + "%'";
command = command +"\n"+"go"+"\n"+"select WBSCode,Description,TerritoryCode,AmountReleased,convert(varchar(25),CreatedOn,106) as CreatedOn,IsEnable from try1 where TerritoryCode in (select TerritoryCode from Territory where StateCode='" + mbcode + "')";
SqlCommand cmdd = new SqlCommand(command);
cmdd.Connection = con;
SqlDataAdapter da = new SqlDataAdapter(cmdd);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
mngwbsGV1.DataSource = dt;
mngwbsGV1.DataBind();
但问题是我在da.Fill(dt)
中遇到错误:
“go”附近的语法不正确。 “CREATE VIEW”必须是查询批处理中的第一条语句。 'go' 附近的语法不正确。
但是当我在我的 SQL Server 2008 中运行它时,它正在运行但不检索数据
我该怎么办?
【问题讨论】:
您应该单独创建您的视图 - 而不是在从中检索数据的过程中!然后,在您的 ASP.NET 中 - 仅来自该视图的SELECT
。另外:GO
是 SQL Server Mgmt Studio 分隔符 - 它不是 SQL 关键字......
但问题是我也需要删除这个视图
使用“;”代替“GO”..
但是如果您在使用后立即删除视图 - 这有什么好处?您在这里真正想要达到什么目的?在我看来,在这里使用视图似乎是错误的方法......
【参考方案1】:
您应该单独创建视图,例如在安装或版本升级期间 - 使用常规 SQL 脚本。
如果您必须在代码中执行此操作 - 您需要这样做:
using(SqlConnection conn = new SqlConnection(--your connection string here--))
SqlCommand dropView = new SqlCommand("IF OBJECT_ID('try1') IS NOT NULL DROP VIEW try1", conn);
conn.Open();
dropView.ExecuteNonQuery();
SqlCommand createView = new SqlCommand("CREATE VIEW try1 AS SELECT WBSCode, Description, TerritoryCode, AmountReleased, CONVERT(VARCHAR(25), CreatedOn, 106) AS CreatedOn, IsEnable FROM WBS ", conn);
createView.ExecuteNonQuery();
conn.Close();
然后您可以使用它从中进行选择(使用参数化查询而不是将您的 SQL 命令连接在一起以避免 SQL 注入攻击并提高性能!):
SqlCommand selectCmd = new SqlCommand("SELECT WBSCode, Description, TerritoryCode, AmountReleased, CreatedOn, IsEnable FROM try1 WHERE TerritoryCode IN (SELECT TerritoryCode FROM Territory WHERE WBSCode LIKE @msrch AND StateCode = @mbcode", conn);
selectCmd.Parameters.Add("@msrch", SqlDbType.VarChar, 50).Value = "%" + msrch + "%";
selectCmd.Parameters.Add("@mbcode", SqlDbType.VarChar, 50).Value = mbcode;
SqlDataAdapter da = new SqlDataAdapter(selectCmd);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
mngwbsGV1.DataSource = dt;
mngwbsGV1.DataBind();
但话又说回来:如果您有这样一个简单的选择 - 首先您需要一个视图来做什么,特别是如果您只想创建它,从中选择,然后立即再次删除它。一点意义都没有……
【讨论】:
以上是关于从asp.net中的视图创建和选择数据没有发生?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 asp.net MVC 中的视图运行 JavaScript
ASP.NET MVC 如何从嵌套对象的视图模型集合中动态创建表结构
如何处理应用程序启动时发生的 ASP.NET 应用程序错误以及 MVC 视图中的传输和显示错误?