2017-02-26 22 views
1

我正在創建一個表單。在同一個表單中,我也在gridview中顯示當前數據。我正在使用存儲過程進行插入和選擇。c#代碼重用性

每次頁面加載時,即使沒有提交,也會插入一個空行。

任何幫助表示讚賞。

謝謝。

這是GridView控件

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="userID" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:BoundField DataField="userID" HeaderText="userID" InsertVisible="False" ReadOnly="True" SortExpression="userID" /> 
      <asp:BoundField DataField="userFname" HeaderText="userFname" SortExpression="userFname" /> 
      <asp:BoundField DataField="userLName" HeaderText="userLName" SortExpression="userLName" /> 
      <asp:BoundField DataField="userMoNo" HeaderText="userMoNo" SortExpression="userMoNo" /> 
      <asp:BoundField DataField="userEmail" HeaderText="userEmail" SortExpression="userEmail" /> 
      <asp:BoundField DataField="userCity" HeaderText="userCity" SortExpression="userCity" /> 
      <asp:BoundField DataField="userArea" HeaderText="userArea" SortExpression="userArea" /> 
      <asp:BoundField DataField="userType" HeaderText="userType" SortExpression="userType" /> 
      <asp:BoundField DataField="userStatus" HeaderText="userStatus" SortExpression="userStatus" /> 
      <asp:BoundField DataField="strOwner" HeaderText="strOwner" SortExpression="strOwner" /> 
      <asp:BoundField DataField="db_tstamp" HeaderText="db_tstamp" SortExpression="db_tstamp" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:IBS_3 %>" SelectCommand="SELECT * FROM [tbl_users]"></asp:SqlDataSource> 

這是代碼隱藏

using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

namespace IBS3.admin 
{ 
    public partial class add_user : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string cs = ConfigurationManager.ConnectionStrings["IBS_3"].ConnectionString; 
      using (SqlConnection conn = new SqlConnection(cs)) 
      { 

       SqlCommand cmd = new SqlCommand("spInsUser", conn); 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add("userFName", SqlDbType.NVarChar).Value = txtFName.Text; 
       cmd.Parameters.Add("userLName", SqlDbType.NVarChar).Value = txtLName.Text; 
       cmd.Parameters.Add("userMoNo", SqlDbType.NVarChar).Value = txtMoNo.Text; 
       cmd.Parameters.Add("userEmail", SqlDbType.NVarChar).Value = txtEmail.Text; 
       cmd.Parameters.Add("userCity", SqlDbType.NVarChar).Value = txtCity.Text; 
       cmd.Parameters.Add("userArea", SqlDbType.NVarChar).Value = txtArea.Text; 
       cmd.Parameters.Add("userType", SqlDbType.NVarChar).Value = txtUserType.Text; 
       cmd.Parameters.Add("userStatus", SqlDbType.NVarChar).Value = txtStatus.Text; 
       cmd.Parameters.Add("@strOwner", SqlDbType.VarChar).Value = User.Identity.Name; 
       cmd.Parameters.Add("@db_tstamp", SqlDbType.DateTime2).Value = DateTime.Now; 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

這是插入過程

USE [IBS_3] 
GO 
/****** Object: StoredProcedure [dbo].[spInsUser] Script Date: 02-26-2017 15:46:07 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spInsUser] 
(
    @userFname nvarchar(50), 
    @userLName nvarchar(50), 
    @userMoNo nvarchar(50), 
    @userEmail nvarchar(50), 
    @userCity nvarchar(50), 
    @userArea nvarchar(50), 
    @userType nvarchar(50), 
    @userStatus nvarchar(50), 
    @strOwner nvarchar(50), 
    @db_tstamp datetime2 
) 
AS 
    SET NOCOUNT OFF; 
INSERT INTO [tbl_users] ([userFname], [userLName], [userMoNo], [userEmail], [userCity], [userArea], [userType], [userStatus], [strOwner], [db_tstamp]) VALUES (@userFname, @userLName, @userMoNo, @userEmail, @userCity, @userArea, @userType, @userStatus, @strOwner, @db_tstamp); 

SELECT userID, userFname, userLName, userMoNo, userEmail, userCity, userArea, userType, userStatus, strOwner, db_tstamp FROM tbl_users WHERE (userID = SCOPE_IDENTITY()) 

這是選擇過程

USE [IBS_3] 
GO 
/****** Object: StoredProcedure [dbo].[spSelUser] Script Date: 02-26-2017 15:47:08 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spSelUser] 
AS 
    SET NOCOUNT ON; 
SELECT  userID, userFname, userLName, userMoNo, userEmail, userCity, userArea, userType, userStatus, strOwner, db_tstamp 
FROM   tbl_users 

回答

1

這是因爲您在Page_Load中添加了數據插入邏輯,它的功能是當頁面首先加載時,它會運行其中的每種方法或邏輯,然後運行頁面的其餘部分,因此不應將插入邏輯放在Page_Load

你應該創建一個類

private void insertuser() 
{ 

string cs = ConfigurationManager.ConnectionStrings["IBS_3"].ConnectionString; 
      using (SqlConnection conn = new SqlConnection(cs)) 
      { 

       SqlCommand cmd = new SqlCommand("spInsUser", conn); 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add("userFName", SqlDbType.NVarChar).Value = txtFName.Text; 
       cmd.Parameters.Add("userLName", SqlDbType.NVarChar).Value = txtLName.Text; 
       cmd.Parameters.Add("userMoNo", SqlDbType.NVarChar).Value = txtMoNo.Text; 
       cmd.Parameters.Add("userEmail", SqlDbType.NVarChar).Value = txtEmail.Text; 
       cmd.Parameters.Add("userCity", SqlDbType.NVarChar).Value = txtCity.Text; 
       cmd.Parameters.Add("userArea", SqlDbType.NVarChar).Value = txtArea.Text; 
       cmd.Parameters.Add("userType", SqlDbType.NVarChar).Value = txtUserType.Text; 
       cmd.Parameters.Add("userStatus", SqlDbType.NVarChar).Value = txtStatus.Text; 
       cmd.Parameters.Add("@strOwner", SqlDbType.VarChar).Value = User.Identity.Name; 
       cmd.Parameters.Add("@db_tstamp", SqlDbType.DateTime2).Value = DateTime.Now; 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
} 

和提交事件調用insertuser();

+0

哦男人....非常感謝...! –

+0

你可以接受我的答案,如果你不知道如何檢查這個http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Usman