Как получить общие записи в хранимой процедуре и коде C#?

Я использую параметр с табличным значением с определенным пользователем типом таблицы, вот мой код ниже. Я пытаюсь заполнить свою хранимую процедуру из таблицы данных.

ИЗМЕНИТЬ ПРОЦЕДУРУ [dbo]. [TableName] @dt КАК 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 (строка)));

       //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();
        }
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
191
2

Ответы 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 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);

Уверены, у вас есть соответствующие индексы?

Alexander Ekzhanov 04.05.2018 15:49

Я создал без ограничений, затем попытался вернуться и обновить внешние ключи и получить ту же ошибку

212Coder 04.05.2018 15:57

ALTER TABLE Аккаунт ДОБАВИТЬ ИНОСТРАННЫЙ КЛЮЧ (CUST_NUM) ССЫЛКИ CUSTOMER_1 (CUST_NUM);

212Coder 04.05.2018 15:58

СОЗДАТЬ ТАБЛИЧНУЮ АККАУНТ (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));

212Coder 04.05.2018 16:04

ЗАТЕМ я добавляю Customer_1, затем возвращаюсь и пытаюсь изменить таблицу.

212Coder 04.05.2018 16:04

В вашей таблице ACCOUNT и CUSTOMER_1 есть циклическая ссылка на внешний ключ, из-за которой возникла проблема. Подобные проблемы уже описаны здесь и здесь.

Хочу предложить вам сделать упрощенную структуру базы данных. Насколько я понимаю, вам не нужен столбец CUST_NUM в вашей таблице ACCOUNT, который вы пытаетесь использовать как внешний ключ из таблицы CUSTOMER_1. Постарайтесь сделать структуру таблицы вашей базы данных максимально простой, как это предлагается во второй ссылке, которую я предоставил выше.

Да, я добавлял столбец с номером клиента, чтобы я мог сказать, что он связан с учетной записью.

212Coder 04.05.2018 16:09

Я думаю, что наличие ACCT_ID в таблице CUSTOMER_1 вполне соответствует вашим требованиям.

Reaz Murshed 04.05.2018 16:11

ALTER TABLE CUSTOMER_1 -> ДОБАВИТЬ ИНОСТРАННЫЙ КЛЮЧ (ACCT_ID) ССЫЛКИ НА АККАУНТ (ACCT_ID); ОШИБКА 1215 (HY000): невозможно добавить ограничение внешнего ключа.

212Coder 04.05.2018 17:03

Вы удалили внешний ключ из таблицы счетов?

Reaz Murshed 04.05.2018 17:04

Да это удалено

212Coder 04.05.2018 17:40

ОК. Вы сбросили старую таблицу счетов и создали новую?

Reaz Murshed 04.05.2018 17:41

Да. Я просто начал полностью заново.

212Coder 04.05.2018 18:59

Другие вопросы по теме