在后面的代码中设置SqlDataSource的insert参数的值

时间:2012-06-02 10:17:48

标签: c# parameters insert code-behind sqldatasource

我的格式为SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 

        InsertCommand="INSERT INTO [contact] ([Name], [phone], [email], [comment], [time]) VALUES (@Name, @phone, @email, @comment, @time)" 
        oninserting="SqlDataSource1_Inserting" >
        <InsertParameters>
            <asp:ControlParameter ControlID="TBname" Name="Name" PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="TBphone" Name="phone" PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="TBemail" Name="email" PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="TBmessage" Name="comment" PropertyName="Text" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>

我有这个函数,它必须在前四个字段中保存TextBoxes的值,在第五个字段中保存当前时间:

protected void SaveToDB(object sender, EventArgs e)
{
        SqlDataSource1.InsertParameters["time"].DefaultValue = DateTime.Now.ToString();
        SqlDataSource1.Insert();
}

5个字段中的4个从我的表单中的某些TextBox中获取它们的值。现在问题是最后一个字段:time我无法设置它的值。该函数运行时,会出现以下错误:

  

异常详细信息:System.Data.SqlClient.SqlException:String or   二进制数据将被截断。声明已经终止。

我该怎么办?

谢谢你花时间。

2 个答案:

答案 0 :(得分:3)

您应该可以直接在InsertCommand中使用SQL GetDate函数,而无需使用代码隐藏。

InsertCommand="INSERT INTO [contact] ([Name], [phone], [email], [comment], [time]) VALUES (@Name, @phone, @email, @comment, GetDate())"  

答案 1 :(得分:1)

试试这个:

DateTime.Now.ToShortDateString(); 

“字符串或二进制数据将被截断。”通常与数据库中具有较小尺寸的字段有关,然后与您尝试放入其中的字段有关。