C# 我需要在更新查询中使用下拉列表中的值

C# 我需要在更新查询中使用下拉列表中的值,c#,asp.net,sql,C#,Asp.net,Sql,所以我有一个fileupload控件,用来将图片上传到我的服务器。在没有下拉列表的情况下,我可以让它正常工作,但我需要下拉列表中的值来指定要在数据库中更新的记录。以下是aspx: <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/TravelJoansDB.mdb" SelectCommand="SELECT * FROM [Table2] O

所以我有一个fileupload控件,用来将图片上传到我的服务器。在没有下拉列表的情况下,我可以让它正常工作,但我需要下拉列表中的值来指定要在数据库中更新的记录。以下是aspx:

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
        DataFile="~/App_Data/TravelJoansDB.mdb" 
        SelectCommand="SELECT * FROM [Table2] ORDER BY ID DESC" 
        UpdateCommand="UPDATE Table2 SET (Image) VALUES (@Image) WHERE ID=@ID" >
        <UpdateParameters>
            <asp:Parameter Name="Image" Type="String" />
            <asp:Parameter Name="ID" Type="Int16" />
        </UpdateParameters>
</asp:AccessDataSource>

<asp:Label ID="SelectBlogLabel" runat="server" Text="Select a Blog ID for the photo that you are uploading" /><br />
<asp:DropDownList ID="BlogPostTitleDDL" runat="server" 
                  AutoPostBack="true" 
                  DataSourceID="AccessDataSource1" 
                  DataValueField="ID" /><br />

<asp:FileUpload ID="FileUpload1" runat="server" />

<asp:Button ID="UploadButton" runat="server" OnClick="UploadFile" Text="Upload photo" /><br />
<asp:Label ID="UploadStatusLabel" runat="server" Text="Status: " /><br />





下面是背后的代码:

protected void UploadFile(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        try
        {
            if (FileUpload1.PostedFile.ContentType == "image/jpeg")
            {
                if (FileUpload1.PostedFile.ContentLength < 10240000)
                {
                    string filename = Path.GetFileName(FileUpload1.FileName);
                    FileUpload1.SaveAs(Server.MapPath("~/PlaceImages/") + filename);
                    UploadStatusLabel.Text = "Upload status: Complete!";
                    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\TravelJoansDB.mdb;";
                    string cmdstr = "UPDATE Table2 (Image) VALUES (@Image) WHERE ID=@ID";

                    OleDbConnection con = new OleDbConnection(constr);
                    OleDbCommand com = new OleDbCommand(cmdstr, con);

                    int blogID = BlogPostTitleDDL.SelectedIndex;
                    con.Open();
                    com.Parameters.AddWithValue("@Image", filename);
                    com.Parameters.AddWithValue("@ID", blogID);
                    com.ExecuteNonQuery();
                    con.Close();
                }
                else
                    UploadStatusLabel.Text = "Upload status: The file has to be less than 10 MB!";
            }
            else
                UploadStatusLabel.Text = "Upload status: Only JPEG files are accepted!";
        }
        catch (Exception ex)
        {
            UploadStatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}
受保护的无效上载文件(对象发送方,事件参数e)
{
if(FileUpload1.HasFile)
{
尝试
{
if(FileUpload1.PostedFile.ContentType==“image/jpeg”)
{
if(FileUpload1.PostedFile.ContentLength<10240000)
{
字符串filename=Path.GetFileName(FileUpload1.filename);
FileUpload1.SaveAs(Server.MapPath(“~/PlaceImages/”)+文件名);
UploadStatusLabel.Text=“上传状态:完成!”;
字符串constr=@“Provider=Microsoft.Jet.OLEDB.4.0;数据源=| DataDirectory | \TravelJoansDB.mdb;”;
string cmdstr=“更新表2(图像)值(@Image),其中ID=@ID”;
OLEDB连接con=新OLEDB连接(cont);
OleDbCommand com=新的OleDbCommand(cmdstr,con);
int blogID=blogpostitleddl.SelectedIndex;
con.Open();
com.Parameters.AddWithValue(“@Image”,文件名);
com.Parameters.AddWithValue(“@ID”,blogID);
com.ExecuteNonQuery();
con.Close();
}
其他的
UploadStatusLabel.Text=“上传状态:文件必须小于10 MB!”;
}
其他的
UploadStatusLabel.Text=“上传状态:仅接受JPEG文件!”;
}
捕获(例外情况除外)
{
UploadStatusLabel.Text=“上载状态:无法上载文件。出现以下错误:“+ex.Message;
}
}
}

每当我尝试上载文件时,它都会告诉我update语句的语法有错误。所以我真的不知道如何使用DDL中的值来指定我想要数据库中的哪个记录。任何帮助都将不胜感激。

对于TSQL更新查询,如下所示

UPDATE TABLENAME SET COLUMN1='valuesyouwant' where='whatever'
对于您的查询,应该是这样的

"UPDATE Table2 SET Image=@Image WHERE ID=@ID"

这样就消除了语法错误。很明显,我把那个硬核的语法搞错了。我从INSERT查询更改了它,显然我所做的只是将INSERT更改为UPDATE。。。但是,该表没有更新…顺便说一句,它不是int blogID=blogpostitleddl.SelectedIndex;你为什么不用这个?int blogID=blogpostitleddl.SelectedValue;我刚试过,它告诉我SelectedValue用于字符串时出错。是否将.ToInt32(BlogPostTitleDDL.SelectedValue)转换为字符串?