【问题标题】:How to get total records in stored procedure and C# code?如何获取存储过程和 C# 代码中的总记录?
【发布时间】:2018-10-15 00:43:21
【问题描述】:

我正在使用具有用户定义表类型的表值参数,下面是我的代码。我正在尝试从我的数据表中填充我的存储过程。

ALTER PROCEDURE [dbo].[TableName] @dt AS dbo.DataTableAsType 只读

AS
BEGIN
INSERT INTO dbo.[DataTableAsType]
    ([Column names]) --There are 89 column names
SELECT
([ColumnNames])
FROM @dt
END

Second Stored procedure
@totalRecords int OUTPUT
INSERT INTO dbo.tablename1 FROM dbo.tablename2
SELECT @totalRecords = COUNT(*) FROM dbo.[tableName2]







public void InsertDataTableAF2CSV(string ext)
    {

        DataTable tvp = new DataTable();
        string[] arr = new string[89] {"names go here"};

//将 89 个列名 1 乘 1 tvp.Columns.Add(new DataColumn("列名", typeof(string)));

       //populate datarows I currently have over 1,000 rows. 
        DataRow row;
        for (int i = 0; i <= arr.Length; i++)
        {
            row = tvp.NewRow();
            row["Column name"] = i;

            //I add all 89 column names = i then I add rows.
            tvp.Rows.Add(row);
        }
        //read the file name I entered              
        tvp= ReadFile(filename, " ", null);

        //Passing a Table-Valued Parameter to a Stored Procedure
        using (SqlConnection con = new SqlConnection(connection name))
        {
            connection.Open();
            //Execute the cmd
            // Configure the command and parameter. 
            SqlCommand cmd = new SqlCommand("dbo.storedprocedure", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandTimeout = 5000;
            ///SqlParameter tvparam = cmd.Parameters.AddWithValue("@dt", tvp);
            // Create a DataTable with the modified rows.  
            DataTable addedCategories = tvp.GetChanges(DataRowState.Added);
            // these next lines are important to map the C# DataTable object to the correct SQL User Defined Type
            SqlParameter parameter = new SqlParameter("@dt", SqlDbType.Structured)
            {
                //TypeName = "dbo.DataTableAsType",
                TypeName = "dbo.importDataTable",
                Value = tvp
            };                                   
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }

【问题讨论】:

    标签: c# mysql asp.net sql-server asp.net-mvc


    【解决方案1】:

    您可能正在尝试在创建数据库之前添加外键。 尝试创建它们,然后在更新它们后添加外键。

    [编辑]

    这里:

    CREATE TABLE ACCOUNT
    (ACCT_ID CHAR(10),
    BRANCH_ID CHAR(20),
    CUST_NUM CHAR(15),
    ACCT_TYPE CHAR(20),
    FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID),
    FOREIGN KEY (CUST_NUM) REFERENCES CUSTOMER_1 (CUST_NUM));
    

    您正在尝试引用尚不存在的 CUSTOMER_1 (CUST_NUM)。

    [编辑 2]

    您似乎缺少一些索引。 试试这个:

    您可能正在尝试在创建数据库之前添加外键。 尝试创建它们,然后在更新它们后添加外键。

    [编辑]

    这里:

    CREATE TABLE ACCOUNT
    (ACCT_ID CHAR(10),
    BRANCH_ID CHAR(20),
    CUST_NUM CHAR(15),
    ACCT_TYPE CHAR(20),
    FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID),
    FOREIGN KEY (CUST_NUM) REFERENCES CUSTOMER_1 (CUST_NUM));
    

    您正在尝试引用尚不存在的 CUSTOMER_1 (CUST_NUM)。

    [编辑 2]

    试试这个:

    CREATE TABLE BRANCH_1
        (BRANCH_ID CHAR(20) PRIMARY KEY,
        BRANCH_NAME CHAR(20),
        BRANCH_ADDRESS CHAR(30));
    
    CREATE TABLE EMPLOYEE
        (EMP_ID CHAR(4) PRIMARY KEY,
        EMP_FNAME CHAR(50),
        EMP_LNAME CHAR(50),
        BRANCH_ID CHAR(20));
    
        CREATE TABLE ACCOUNT
        (ACCT_ID CHAR(10),
        BRANCH_ID CHAR(20),
        CUST_NUM CHAR(15),
        ACCT_TYPE CHAR(20));
    
    CREATE TABLE CUSTOMER_1
        (CUST_NUM CHAR(15),
        CUS_FNAME CHAR(50),
        CUS_LNAME CHAR(50),
        CUS_ADDRESS CHAR(15),
        BRANCH_ID CHAR(20),
        ACCT_ID CHAR(10),
        LOAN_ID CHAR(10));
    
    CREATE TABLE LOAN
        (LOAN_ID CHAR(10),
        LOAN_NAME CHAR(50),
        LOAN_TYPE CHAR(20),
        CUST_NUM CHAR(15));
    
    
    ALTER TABLE CUSTOMER_1 ADD INDEX(CUST_NUM);
    ALTER TABLE ACCOUNT ADD INDEX(ACCT_ID);
    ALTER TABLE EMPLOYEE ADD FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID);
    ALTER TABLE ACCOUNT ADD FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID);
    ALTER TABLE ACCOUNT ADD FOREIGN KEY (CUST_NUM) REFERENCES CUSTOMER_1 (CUST_NUM);
    ALTER TABLE CUSTOMER_1 ADD FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID);
    ALTER TABLE CUSTOMER_1 ADD FOREIGN KEY (ACCT_ID) REFERENCES ACCOUNT (ACCT_ID);
    ALTER TABLE LOAN ADD FOREIGN KEY (CUST_NUM) REFERENCES CUSTOMER_1 (CUST_NUM);
    

    【讨论】:

    • 确定有对应的索引吗?
    • 我在没有约束的情况下创建然后尝试返回并使用外键进行更新并得到相同的错误
    • ALTER TABLE Account ADD FOREIGN KEY (CUST_NUM) REFERENCES CUSTOMER_1(CUST_NUM);
    • CREATE TABLE ACCOUNT (ACCT_ID CHAR(10), BRANCH_ID CHAR(20), CUST_NUM CHAR(15), ACCT_TYPE CHAR(20), FOREIGN KEY (BRANCH_ID) REFERENCES BRANCH_1 (BRANCH_ID));跨度>
    • 然后我添加 Customer_1 然后我返回并尝试更改表。
    【解决方案2】:

    您的ACCOUNT 表和CUSTOMER_1 具有引发问题的循环外键引用。 herehere 已经描述了类似的问题。

    我想建议你做一个简化的数据库结构。据我所知,您不需要 ACCOUNT 表中的 CUST_NUM 列,您正在尝试使用来自 CUSTOMER_1 表的外键。尽量保持您的数据库表结构尽可能简单,如我在上面提供的第二个链接中所建议的那样。

    【讨论】:

    • 是的,我添加了一个客户编号列,所以我可以说它链接到一个帐户。
    • 我认为在CUSTOMER_1 表中有ACCT_ID 足以满足您的要求。
    • ALTER TABLE CUSTOMER_1 -> 添加外键(ACCT_ID)参考帐户(ACCT_ID); ERROR 1215 (HY000): 无法添加外键约束
    • 您是否从帐户表中删除了外键?
    • 是的,它已被删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多