0

我真的需要帮助。任何人都可以看到以下代码的问题吗?所有SelectedValue项目都只是 SQL 数据绑定下拉框和 2 个文本框,一个带有日历控件,另一个用于简单的字符串输入。用户转到页面,填写它。我抓取DateTime.NowJob_Date字段,其余部分抓取输入的值,但抓取日期除外Job_DueDate(通过日历控件输入为 DD/MM/YYYY 中的 7/06/2013格式),将其转换为DateTime并添加 17 小时,因此默认情况下,作业的截止日期是所选日期的下午 5 点。插入后,我想OUTPUT将新创建的 IDtbl_Job放入表中调用的字段Job_IDtbl_job_contacts。我执行此操作的方式是让我将存储的 ID 返回给我result. 在第二个INSERT查询中,我将该结果和另一个结果插入SelectValuetbl_job_contacts中,然后刷新页面。

protected void submitButton_Click(object sender, EventArgs e)
{
    DateTime dt = DateTime.Now;

    var dd = Convert.ToDateTime(DueDate.Text);
    DueDate.Text = dd.AddHours(17).ToString();

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HSEProjRegConnectionString1"].ConnectionString);
    conn.Open();

    SqlCommand cmd1 = new SqlCommand("INSERT INTO tbl_Job(Job_Date,Job_Origin_ID,Job_Department_ID,Job_Priority_ID,Job_Project_ID,Job_Status_ID,Job_DueDate,Job_Project_Item) OUTPUT tbl_Job.Job_ID INTO tbl_job_contacts(Job_ID) VALUES ('" + dt + "', '" + ReferenceOrigin.SelectedValue + "', '" + Department.SelectedValue + "', '" + Priority.SelectedValue + "', '" + Project.SelectedValue + "', '" + Status.SelectedValue + "', '" + DueDate.Text + "', '" + ProjectItem.Text + "')", conn);
    int result = ((int)cmd1.ExecuteScalar());
    SqlCommand cmd2 = new SqlCommand("INSERT INTO tbl_job_contacts(Job_ID,Contact_ID) VALUES ('" + result + "', '" + Sponsor.SelectedValue + "')", conn);
    cmd2.ExecuteNonQuery();
    conn.Close();

    Page.Response.Redirect(Page.Request.Url.ToString(), false);
}

无论我删除或修改什么,我都会不断出错。varchar 转换为 DateTime 是一个超出范围的值,它不会告诉我是哪一个,因为有 2 个,或者Must Declare Local Variable即使OUTPUT我认为我正在使用 MSDN 网站所说的内容。当我尝试以某种方式修改它以查看是否可以找出哪个 DateTime 错误时,甚至出现 NullException 错误。我真的在为此苦苦挣扎,希望有人可以帮助我找出我的代码错误的地方。

4

1 回答 1

1

我认为你的输出子句应该是:

 OUTPUT inserted.Job_ID

OUTPUT子句中,您应该引用inserted伪表,而不是任何实际表。而且因为您想在 C# 代码中捕获结果,所以您不想使用INTO语法 - 您希望它生成一个结果集。

至于日期转换问题,我同意@marc_s 的评论 - 使用参数化查询,更重要的是,不要将日期/日期时间值转换为字符串 - 将它们保留为Date值并让 ADO.Net 处理将它们直接转换为 SQLdatetime值.

于 2013-06-07T06:33:04.807 回答