程序在adapter.Fill(datatable)给出错误的行停止:oleDbException为Unhandled:没有给出一个或多个必需参数的值.
当我将SQL复制到访问中时,没有给出错误..
SQL:
public static List<Movie> AllMoviesSameActor(string lastName)
{
string command;
command = "SELECT movieId, name, headActor, Director, ReleaseDate, lenghtMin"
+ "FROM Movies" +
" WHERE headactor = " + lastName ;
OleDbDataAdapter adapter = new OleDbDataAdapter(command, connectionString);
DataTable datatable = new DataTable();
adapter.Fill(datatable);
List<Movie> list= new List<Movie>();
for (int i = 0; i < datatable.Rows.Count; i++)
{
Movie movie = new Movie();
movie.movieId = datatable.Rows[i].Field<int>("movieId");
movie.name = datatable.Rows[i].Field<string>("name");
movie.headActor = datatable.Rows[i].Field<string>("headActor");
movie.director = datatable.Rows[i].Field<string>("director");
movie.releaseDate = datatable.Rows[i].Field<DateTime>("releaseDate");
movie.lenghtMin = datatable.Rows[i].Field<int>("lenghtMin");
list.Add(movie);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
表格中的代码:
public FormMoviesSameActor()
{
InitializeComponent();
List<Actor> actors = Actor.AllActors();
comboBoxActeur.DataSource = actors;
comboBoxActeur.DisplayMember = "LastName";
comboBoxActeur.ValueMember = "LastName";
}
private void buttonSearchMovies_Click(object sender, EventArgs e)
{
Actor dedicatedActor = new Actor();
dedicatedActor.LastName = Convert.ToString(comboBoxActeur.SelectedValue);
listBox1.DataSource = dedicatedActor.Movies;
listBox1.DisplayMember = "AllData";
}
Run Code Online (Sandbox Code Playgroud)
Actor.Movies方法如下所述
public List<Movie> Movies
{
get { return Movie.AllMoviesSameActor(this.lastName);
}
Run Code Online (Sandbox Code Playgroud)
当您收到此错误时,表示Access Engine无法正确找到您的一个或多个列名或整个表名.
因此,第一步是确保列的名称是正确的.
特别是minLenght看起来不对(minLength ???)
字符串连接也包含错误.缺少FROM子句之前的空格,但这应该抛出语法错误,而不是缺少参数.
command = "SELECT movieId, name, headActor, Director, ReleaseDate, lenghtMin " + // space added
"FROM Movies WHERE headactor = " + lastName ;
Run Code Online (Sandbox Code Playgroud)
最后,该headactor字段似乎是一个文本字段,如果这是真的,您需要在lastName变量周围使用单引号.但我建议使用参数化查询
command = "SELECT movieId, name, headActor, Director, ReleaseDate, lenghtMin " +
"FROM Movies WHERE headactor = ?";
OleDbDataAdapter adapter = new OleDbDataAdapter(command, connectionString);
adapter.SelectCommand.Parameters.AddWithValue("@p1", lastName);
.....
Run Code Online (Sandbox Code Playgroud)
你有几个问题.用这个:
command = "SELECT movieId, name, headActor, Director, ReleaseDate, lenghtMin"
+ " FROM Movies" +
" WHERE headActor = '" + lastName + "'";
Run Code Online (Sandbox Code Playgroud)
基本上你错过了你FROM和最后一列之间的空格.你也错过了你周围的字符串限定符lastName.
如果你正在为生产做些什么,你不应该这样做.您应该研究使用参数化查询.
正如Brian指出的那样,您的列名也与您尝试从数据行字段中检索的列名不匹配.您需要使用正确的名称更正此问题.
| 归档时间: |
|
| 查看次数: |
18531 次 |
| 最近记录: |