Asp.net 通过从另一个表中提取数据插入到表中

Asp.net 通过从另一个表中提取数据插入到表中,asp.net,sql,vb.net,ms-access,relational-database,Asp.net,Sql,Vb.net,Ms Access,Relational Database,我从其他人那里继承了这个项目,需要清理它以满足新的需求-他们就是这样设计的 我的Access数据库中有2个表(我已将字段的数据类型包括在花括号中): 事件: EventID{AutoNumber}EventTitle{Short Text}EventDescription{Long Text}EventDate{Date/Time}EventCategory{使用类别/类别的行源查找} 类别: CategoryID{AutoNumber}| CategoryTitle{Short Text}|

我从其他人那里继承了这个项目,需要清理它以满足新的需求-他们就是这样设计的

我的Access数据库中有2个表(我已将字段的数据类型包括在花括号中):

事件:

EventID{AutoNumber}EventTitle{Short Text}EventDescription{Long Text}EventDate{Date/Time}EventCategory{使用类别/类别的行源查找}

类别:

CategoryID{AutoNumber}| CategoryTitle{Short Text}| CategoryImage{Short Text}| CategoryColor{Short Text}

“Categories”(类别)表保存有关特定类别的所有“Master”(主)信息,例如其名称、图标(例如勾号、叉号等)

我有一个查询(在Access内部)将这两个表中的数据拉到一起,下面的字段按顺序排列:

EventID | EventTitle | EventDescription | EventDate | CategoryTitle | CategoryImage

查询的SQL为:

SELECT Events.EventID, Events.EventTitle, Events.EventDescription,
Events.EventDate, Categories.CategoryTitle, Categories.CategoryImage,
Categories.CategoryColor FROM Events INNER JOIN Categories ON
Events.EventCategory = Categories.CategoryID ORDER BY
Events.EventDate;
网站的其他区域依靠查询来检索信息

在Visual Studio中,我尝试将asp文本框和下拉控件中的值从我的数据库插入以下字段:

 Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
     conn.Open()
     Dim cmd As New OleDbCommand("INSERT INTO Events (EventTitle, EventDescription, EventDate, EventCategory) VALUES (@f1,@f2,@f3,@f4)",
    conn)
     cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
     cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
     cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
     CultureInfo.InvariantCulture))
     cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedValue)
     cmd.ExecuteNonQuery()
     conn.Close()
 End Sub
  • EventTitle(到Events.EventTitle)
  • EventDescription(到Events.EventDescription)
  • EventDate(到Events.EventDate)
  • EventCategory(到Events.EventCategory)
  • 数字4是有问题的,因为它当前是对“主”事件表的访问查找,该表包含关于实际类别的信息。据推测,数据从未以这种方式插入表中;设置事件类别的唯一可能方法是使用Access数据库中的下拉组合框来选择事件

    最后,这里是我正在编写的插入数据库的子程序:

     Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
         Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
         conn.Open()
         Dim cmd As New OleDbCommand("INSERT INTO Events (EventTitle, EventDescription, EventDate, EventCategory) VALUES (@f1,@f2,@f3,@f4)",
        conn)
         cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
         cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
         cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
         CultureInfo.InvariantCulture))
         cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedValue)
         cmd.ExecuteNonQuery()
         conn.Close()
     End Sub
    
    网站上其他地方还有其他ASP.NET数据索引控件,这些控件依赖于“Categories”表的内容保持不变,因此如何将我上面列出的字段插入到“Events”表中(特别是EventCategory)

    编辑:

    这是我完成的分包:

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles
      Button1.Click
         Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
         conn.Open()
         Dim cmd As New OleDbCommand("INSERT INTO Events (EventTitle, EventDescription, EventDate, EventCategory) VALUES (@f1,@f2,@f3,@f4)",
         conn)
         cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
         cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
         cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
         CultureInfo.InvariantCulture))
         cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedIndex + 1)
         cmd.ExecuteNonQuery()
         conn.Close()
     End Sub
    

    查找字段可能具有欺骗性。假设您有[Categories]表

    CategoryID  CategoryTitle
    1           Pub Crawl
    2           Booze Up
    3           Big Drunk
    
    当您在数据表视图中打开[Events]表时,它看起来是这样的

    EventID EventTitle  EventCategory
    1       Thursday    Pub Crawl
    
    如果你想增加一个新的“星期五”活动,你会认为它会像

    INSERT INTO Events (EventTitle, EventCategory) VALUES ("Friday", "Big Drunk")
    
    但如果“由于类型转换失败,Microsoft Access将1个字段设置为空…”,则该操作将失败。相反,你必须这样做

    INSERT INTO Events (EventTitle, EventCategory) VALUES ("Friday", 3)
    
    其中
    3
    是数字类别ID,而不是您在数据表视图中看到的

    因此,您需要做的是确保从组合框(而不是CategoryTitle)中检索(数字)CategoryID并将其插入事件表中


    顺便说一句,这就是为什么经验更丰富的Access开发人员会避免使用查找字段:它们隐藏了数据库的实际工作,并导致混乱、沮丧,是的,还会让一些用户喝酒……)

    EventCategory
    lookup字段是否允许多选?@Gord Thompson:不,只允许单选,即“Public”、“Private”或“Group Only”@dasblinkenlight:对不起,是的,这是一个错误,我将重新发布我的工作代码(我只是在玩从多个表中选择的游戏,但我意识到解决我的问题需要比简单执行选择查询多得多的腿部工作)哈哈,非常感谢!我只是无法理解查找字段的事情,特别是在VB中将其与SQL查询相结合时。我已经让它工作起来了。(我已经在编辑中发布了上面的工作代码)