我真的需要帮助。任何人都可以看到以下代码的问题?所有SelectedValue
项只是SQL数据绑定下拉框和2个文本框,一个带有日历控件,另一个用于简单的字符串输入。用户转到该页面,将其填入。我抓取DateTime.Now
字段的Job_Date
,其他人抓取输入的值,但抓取日期的Job_DueDate
除外(通过日历输入)控制为2013年7月6日,采用DD / MM / YYYY格式),将其转换为DateTime
并增加17小时,以便默认情况下作业的截止日期为所选日期的下午5点。插入后,我希望OUTPUT
tbl_Job
中Job_ID
新创建的ID进入tbl_job_contacts
表中名为result
的字段。我执行此操作的方式是我将该ID返回给我,我将其存储在INSERT
中。在第二个SelectValue
查询中,我将该结果和另一个tbl_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);
}
表中,然后刷新页面。
Must Declare Local Variable
无论我砍掉或修改什么,我都会遇到错误。 varchar转换为DateTime是一个超出范围的值,它不会告诉我哪一个因为有2个,或OUTPUT
与{{1}},即使我认为我使用的是MSDN网站所说的内容。当我试图修改它以查看我是否可以找出哪个DateTime错误时,甚至出现NullException错误。我真的很挣扎,我希望有人可以帮我理清我的代码错误。
答案 0 :(得分:1)
我认为你的输出条款应该是:
OUTPUT inserted.Job_ID
在OUTPUT
clause中,您应该引用inserted
伪表,而不是任何实际表。而且因为您希望将结果捕获回C#代码中,所以您不希望使用INTO
语法 - 而是希望它生成结果集。
关于日期转换问题,我同意@ marc_s的评论 - 使用parameterised查询,更重要的是,不将日期/日期时间值转换为字符串 - 将它们保留为Date
值,让ADO.Net处理将直接转换为SQL datetime
值。