访问数据库查询字符串

本文关键字:字符串 查询 数据库 访问 | 更新日期: 2023-09-27 18:22:39

我有一个包含两个表的数据库;StudentID是"StudentList"表的主键,StudentID则是"JournalEntries"表的外键。

在我的网站上,我有一个搜索功能,用户可以从学生列表中搜索学生,结果显示在数据网格中。当用户从列表中选择一名学生时,会弹出一个日记条目框。当他们填写日记条目弹出框并单击提交按钮时,我需要将日记条目输入到与从数据网格中选择的学生id相关的日记条目表中。

protected void SearchGrid_SelectedIndexChanged(object sender, EventArgs e)
{
    FNameLabel.Text = SearchGrid.SelectedRow.Cells[1].Text;
    LNameLabel.Text = SearchGrid.SelectedRow.Cells[2].Text;
    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:'Sites'Network2'nrsh'App_Data'myDB.mdb";
    string cmdstr = "SELECT StudentID FROM StudentList WHERE = SearchGrid.SelectedRow.Cells[3].Text AND INSERT into JournalEntries (Topic, SubTopic, Summary, Date, Notes) values (@Topic, @SubTopic, @Summary, @Date, @Notes)";
    OleDbConnection con = new OleDbConnection(constr);
    OleDbCommand com = new OleDbCommand(cmdstr, con);
    con.Open();
    //The following fields are added from the journal entry form to the corresponding database fields
    com.Parameters.AddWithValue("@Topic", ddlTopic.Text);
    com.Parameters.AddWithValue("@SubTopic", txtSubTopic.Text);
    com.Parameters.AddWithValue("@Date", txtDate.Text);
    com.Parameters.AddWithValue("@Summary", txtSummary.Text);
    com.Parameters.AddWithValue("@Notes", txtNotes.Text);
    com.ExecuteNonQuery();
    con.Close();
}

这是我对逻辑的看法,但可能完全错误,因为我对sql了解不多。任何帮助都会很棒。

访问数据库查询字符串

不能组合SELECT和INSERT语句。

string myValue=SearchGrid.SelectedRow.Cells[3].Text;

字符串中没有SearchGrid.SelectedRow.Cells[3].Text的值。。你真的有"SearchGrid.SelectedRow.Cells[3].Text"…

string myValue = SearchGrid.SelectedRow.Cells[3].Text;
string cmdstr = "INSERT into JournalEntries (StudentID , Topic, SubTopic, Summary, Date, Notes) values (@StudentID , @Topic, @SubTopic, @Summary, @Date, @Notes)";

以及后来的

com.Parameters.AddWithValue("@StudentID", myValue);
com.Parameters.AddWithValue("@Topic", ddlTopic.Text);
com.Parameters.AddWithValue("@SubTopic", txtSubTopic.Text);
com.Parameters.AddWithValue("@Date", txtDate.Text);
com.Parameters.AddWithValue("@Summary", txtSummary.Text);
com.Parameters.AddWithValue("@Notes", txtNotes.Text);

我有点猜。您应该给出表名、表中的所有列及其数据类型(int、string等)。

编辑:重构。

您应该创建一个接受参数的类。您永远不应该有数据库代码。。。。坐在GUI代码所在的位置。

public class JournalEntriesManager
{
public static void InsertJournalEntry ( string studentID, string topic , string subTopic, DateTime DateOf  , string summary , string notes )
{
// Your code here
}
}

这就像"关注点分离"的"第1级"。

但简而言之,GUI级别的代码应该从控件中收集信息。。。。。。并将该信息传递给BusinessLogic(在本例中为"JournalEntriesManager")。类似的东西。

不能将多个语句与AND语句完全组合在一起,也就是将多个条件组合在一起。此外,你不能只是神奇地将一个表中的一行与另一个表的一行相关联,相反,你的JournalEntries表中应该有另一列,其中包含与该条目关联的学生的ID。当您在JournalEntries表中插入新行时,您会在该列中包含学生ID,这就是您的日记条目与学生的关联方式。

此外,您的查询不能包含像"SearchGrid.SelectedRow.Cells[3].Text"这样的变量名,您必须将该变量的值直接插入到查询文本中。请记住,您正在将此查询发送到另一个服务器(数据库服务器),它不知道脚本中的变量是什么。