c# - C#中的存储过程,从文本框中传递参数

标签 c# asp.net sql-server

我有一个非常简单的页面,希望了解如何将文本框中的数据传递到我的过程中。我是一个新人,将参数从代码传递到数据库中,我有一页代码是

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ID="LastName" runat="server"></asp:TextBox>
        <asp:TextBox ID="FirstName" runat="server"></asp:TextBox>
        <asp:TextBox ID="Phone1" runat="server"></asp:TextBox>
        <asp:TextBox ID="Phone2" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        <br />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TicketsConnectionString %>" SelectCommand="SELECT * FROM [Employee]"></asp:SqlDataSource>

    </div>
    </form>
</body>
</html>


和aspx代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    string connectionString = ConfigurationManager.ConnectionStrings["TicketsConnectionString"].ConnectionString;

    protected void Button1_Click(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
    SqlConnection con = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("InsertIntoEmployee", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = LastName.Text;
    cmd.Parameters.Add("@FirstName", SqlDbType.VarChar);
    cmd.Parameters.Add("@Phone1", SqlDbType.VarChar);
    cmd.Parameters.Add("@Phone2", SqlDbType.VarChar);
    cmd.Parameters["@LastName"].Value = LastName.Text;
    cmd.Parameters["@FirstName"].Value = FirstName.Text;
    cmd.Parameters["@Phone1"].Value = Phone1.Text;
    cmd.Parameters["@Phone2"].Value = Phone2.Text;
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    }
}


web.config看起来像这样

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <connectionStrings>
    <add name="TicketsConnectionString" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=&quot;C:\Users\Asya\Documents\Visual Studio 2012\WebSites\WebSite6\App_Code\Tickets.mdf&quot;;Integrated Security=True;Connect Timeout=30"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
</configuration>


当我将简单数据传递到我的程序时,它将引发错误

An SqlParameter with ParameterName '@LastName' is not contained by this SqlParameterCollection.


如何解决这个问题?因为在DB端过程完美运行
 正如我之前所说,我真的很陌生。我解决了以前的问题,但这里又解决了一个

The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.FormatException: The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.

Source Error: 


Line 34:         cmd.Parameters["@Phone2"].Value = Phone2.Text;
Line 35:         con.Open();
Line 36:         cmd.ExecuteNonQuery();
Line 37:         con.Close();
Line 38: 


我使用的程序

procedure InsertIntoEmployee
@LastName Nvarchar (25) ,
@FirstName Nvarchar (25) , 
@Phone1 Nvarchar (25) ,
@Phone2 Nvarchar (25)
as 
insert into  Employee  (LastName , FirstName,Phone1,Phone2)values (@LastName,@FirstName,@Phone1,@Phone2);


当我在Db一侧运行程序时
EXEC InsertIntoEmployee N'петров', N'петр', 99999999,null
它工作完美,但从asp.net方面来看,它会抛出错误

最佳答案

尝试这个

protected void Button1_Click(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("InsertIntoEmployee", con);
        cmd.CommandType = CommandType.StoredProcedure;            
        cmd.Parameters.Add("@LastName", SqlDbType.NVarChar(MAX)).Value = LastName.Text;
         cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar(MAX)).Value = FirstName.Text;
          cmd.Parameters.Add("@Phone1", SqlDbType.NVarChar(MAX)).Value = Phone1.Text;
         cmd.Parameters.Add("@Phone2", SqlDbType.NVarChar(MAX)).Value = Phone2.Text;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

      //  gvQuarterlyReport.DataBind();
    }

关于c# - C#中的存储过程,从文本框中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326946/

相关文章:

asp.net - Jeff Prosise 的 session 劫持博客 - 有任何更新吗?

c# - 如何重用asp的列表项:DropDownList controls?

sql - 为什么 MS-SQL-Server(所有版本)将 1.0/12.0 转换为 numeric(8,6)?

sql - 不在 sql server 中的运算符不工作

C#protobuf-net反序列化某些属性值时始终为-1

c# - 访问/管理多组织的数据库设计

c# - 确定文件是否可访问

c# - 在 C# 中使用枚举作为属性类

c# - 我如何使用 Firebug 找出页面上使用了多少个 CSS 文件?

java - 将 JPA Spring boot 与 SQL Server 结合使用