Varchar转换未声明的表变量和其他错误

时间:2013-06-07 03:48:33

标签: c# asp.net sql-server

我真的需要帮助。任何人都可以看到以下代码的问题?所有SelectedValue项只是SQL数据绑定下拉框和2个文本框,一个带有日历控件,另一个用于简单的字符串输入。用户转到该页面,将其填入。我抓取DateTime.Now字段的Job_Date,其他人抓取输入的值,但抓取日期的Job_DueDate除外(通过日历输入)控制为2013年7月6日,采用DD / MM / YYYY格式),将其转换为DateTime并增加17小时,以便默认情况下作业的截止日期为所选日期的下午5点。插入后,我希望OUTPUT tbl_JobJob_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错误。我真的很挣扎,我希望有人可以帮我理清我的代码错误。

1 个答案:

答案 0 :(得分:1)

我认为你的输出条款应该是:

 OUTPUT inserted.Job_ID

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

关于日期转换问题,我同意@ marc_s的评论 - 使用parameterised查询,更重要的是,将日期/日期时间值转换为字符串 - 将它们保留为Date值,让ADO.Net处理将直接转换为SQL datetime值。