【发布时间】:2016-07-06 21:34:57
【问题描述】:
这是我的代码:
public partial class AddMovieForm : System.Web.UI.Page
{
const string connStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\user\Documents\MovieTimeDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlDataAdapter adapter;
DataSet ds;
DataSet genreDS;
protected void Page_Load(object sender, EventArgs e)
{
string name = Request.Form["name"];
string producer = Request.Form["producer"];
string summary = Request.Form["summary"];
string genre = Request.Form["genre"];
int year = int.Parse(Request.Form["year"]);
int length = int.Parse(Request.Form["length"]);
string sqlStr = "SELECT * FROM Movies";
ds = GetDataSet(sqlStr);
string genreSqlString = "SELECT * FROM Genres WHERE genre='"+genre1+"'";
genreDS = GetDataSet(genreSqlString);
DataRow GenreDR = genreDS.Tables[0].Rows[0];
int genre2 = (int)GenreDR["id"];
Insert(name, producer, summary, genre2, year,length);
Response.Redirect("Main.aspx");
}
protected void Insert(string name, string producer, string summary, int genre, int year, int length)
{
DataRow dr = ds.Tables[0].NewRow();
dr["name"] = name;
dr["producer"] = producer;
dr["summary"] = summary;
dr["genre"] = genre;
dr["year"] = year;
dr["length"] = length;
ds.Tables[0].Rows.Add(dr);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.InsertCommand = builder.GetInsertCommand();
adapter.Update(ds);
}
public DataSet GetDataSet(string strSql)
{
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection(connStr);
adapter = new SqlDataAdapter(strSql, conn);
conn.Open();
adapter.Fill(ds);
conn.Close();
return ds;
}
我在 ds 中有三个表:Movies、Members 和 Category。电影在 ds 中,但是当我运行代码时,adapter.Update(ds); 行引起了麻烦:
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.InvalidOperationException:缺少 SourceColumn 'id' 的 DataTable 'Table' 中的 DataColumn 'id'。
问题是我只有在表Category 中有一个id 列,当我用表Movies 填充我的ds 时,我不明白为什么它引用了该表。
【问题讨论】:
-
这部分代码
string genreSqlString = "SELECT * FROM Genres WHERE genre='"+genre1+"'";非常危险,您将自己暴露在SQL 注入攻击之下。你最好使用像实体框架这样的 ORM,或者如果它太笨重,试试 Dapper。