C# 是否可以将多个数据保存到数据库列中

C# 是否可以将多个数据保存到数据库列中,c#,asp.net,mysql,C#,Asp.net,Mysql,大家好,我的数据库结构如下 Field Type FileHeader longblob BatchHeader longblob Entry longblob BtchEntry longblob FileControl longblob 101 111111111 1111111111104021031A094101 52201

大家好,我的数据库结构如下

 Field        Type
FileHeader    longblob
BatchHeader   longblob
Entry         longblob
BtchEntry     longblob
FileControl   longblob
101 111111111 1111111111104021031A094101                                                      
52201               1                   1         PPD1         110402110402   1111000020000001
6221110000251                00000000011              1                     1 0111000020000001
822000000100111000020000000000000000000000011                                  111000020000001
52251               1                   1         CCD1         110402110402   1111000020000002
6281110000251                00000000011              1                     1 0111000020000002
822500000100111000020000000000010000000000001                                  111000020000002
9000006000001000000060066600012000000000003000000000003                                    
我将有数据插入如下

 Field        Type
FileHeader    longblob
BatchHeader   longblob
Entry         longblob
BtchEntry     longblob
FileControl   longblob
101 111111111 1111111111104021031A094101                                                      
52201               1                   1         PPD1         110402110402   1111000020000001
6221110000251                00000000011              1                     1 0111000020000001
822000000100111000020000000000000000000000011                                  111000020000001
52251               1                   1         CCD1         110402110402   1111000020000002
6281110000251                00000000011              1                     1 0111000020000002
822500000100111000020000000000010000000000001                                  111000020000002
9000006000001000000060066600012000000000003000000000003                                    
正如您所看到的,有多行以5、6和8开头。我想将这些单独保存到表的相应列中。有可能吗?如果可以的话,请提一下最好的方法。如果不清楚,请说明

我写的代码是

 using (StreamReader srRead = new StreamReader(filePath))
    {
        while (srRead.Peek() >= 0)
        {
            strLine = srRead.ReadLine();
            if (strLine.StartsWith("1"))
            {
                strFileHeader = strLine;
            }
            if (strLine.StartsWith("5"))
            {
                strBatchHeader = strLine;
            }
            if (strLine.StartsWith("6"))
            {
                strEntry = strLine;
            }
            if (strLine.StartsWith("8"))
            {
                strBtchcntrl = strLine;
            }
            if (strLine.StartsWith("9"))
            {
                strFileCntrl = strLine;
            }
        }

  string strQuery = "insert into tblfiles(FName, FData,FileHeader,BatchHeader,Entry,BtchEntry,FileControl) values (@_FName,@_FData,@_FileHeader,@_BtchHeader,@_EntryDets,@_BtchCntrl,@_FileCntrl)";
        MySqlCommand cmd = new MySqlCommand(strQuery);
        cmd.Parameters.Add("@_FName", MySqlDbType.VarChar).Value = filename;
        cmd.Parameters.Add("@_FData", MySqlDbType.LongBlob).Value = bytes;
        cmd.Parameters.Add("@_FileHeader", MySqlDbType.LongBlob).Value = strFileHeader;
        cmd.Parameters.Add("@_BtchHeader", MySqlDbType.LongBlob).Value = strBatchHeader;
        cmd.Parameters.Add("@_EntryDets", MySqlDbType.LongBlob).Value = strEntry;
        cmd.Parameters.Add("@_BtchCntrl", MySqlDbType.LongBlob).Value = strBtchcntrl;
        cmd.Parameters.Add("@_FileCntrl", MySqlDbType.LongBlob).Value = strFileCntrl;
        InsertUpdateData(cmd);

但是这会将最新的行插入数据库,但是我想按照我所说的保存每一行,为什么不使用Stringbuilder并将所需的行附加到该字符串生成器,然后将它们写入数据库而不是使用字符串呢。如果需要,将每一列分开检索数据将是一件困难的事情。因此,声明一个字符串生成器,并将这些行附加到所需的每一行,然后写入数据库

string strFileHeader = string.Empty;
StringBuilder strBatchHeader=new StringBuilder();
StringBuilder strEntry=new StringBuilder();
StringBuilder strBtchcntrl=new StringBuilder();
string strFileCntrl = string.Empty;


using (StreamReader srRead = new StreamReader(filePath))
    {
        while (srRead.Peek() >= 0)
        {
            strLine = srRead.ReadLine();
            if (strLine.StartsWith("1"))
            {
                strFileHeader = strLine;
            }
            if (strLine.StartsWith("5"))
            {

                strBatchHeader.AppendLine(strLine);
            }
            if (strLine.StartsWith("6"))
            {
                strEntry.AppendLine(strLine);
            }
            if (strLine.StartsWith("8"))
            {
                strBtchcntrl.AppendLine(strLine);
            }
            if (strLine.StartsWith("9"))
            {
                strFileCntrl = strLine;
            }
        }

 string strQuery = "insert into tblfiles(FName, FData,FileHeader,BatchHeader,Entry,BtchEntry,FileControl) values (@_FName,@_FData,@_FileHeader,@_BtchHeader,@_EntryDets,@_BtchCntrl,@_FileCntrl)";
        MySqlCommand cmd = new MySqlCommand(strQuery);
        cmd.Parameters.Add("@_FName", MySqlDbType.VarChar).Value = filename;
        cmd.Parameters.Add("@_FData", MySqlDbType.LongBlob).Value = bytes;
        cmd.Parameters.Add("@_FileHeader", MySqlDbType.LongBlob).Value = strFileHeader;
        cmd.Parameters.Add("@_BtchHeader", MySqlDbType.LongBlob).Value = strBatchHeader.ToString();
        cmd.Parameters.Add("@_EntryDets", MySqlDbType.LongBlob).Value = strEntry.ToString();
        cmd.Parameters.Add("@_BtchCntrl", MySqlDbType.LongBlob).Value = strBtchcntrl.ToString();
        cmd.Parameters.Add("@_FileCntrl", MySqlDbType.LongBlob).Value = strFileCntrl;
        InsertUpdateData(cmd);

否-列每行只能存储一个值。您可以将所有批处理头合并到一个blob中,并将其存储为单个值,但在读取数据时必须能够再次将它们分开

相反,它看起来像:

  • 每个文件以“1”记录开始,以“9”记录结束
  • 每个文件包含零个或多个批
  • 每个批次以“5”记录开始,以“8”记录结束
  • 每个批次包含零个或多个条目(“6”条记录)
  • 如果这些都是正确的,那么您需要3个表,看起来像:

    文件表:

    Field         Type
    -----------   --------
    FileID        integer   # unique file ID - see AUTO_INCREMENT in the MySQL reference
    FName         varchar
    FData         longblob
    FileHeader    longblob  # '1' record
    FileControl   longblob  # '9' record
    
    批次表:

    Field         Type
    -----------   --------
    FileID        integer   # references a row in the File table
    BatchID       integer   # unique batch ID
    BatchHeader   longblob  # '5' record
    BatchControl  longblob  # '8' record
    
    BatchEntry表:

    Field         Type
    -----------   --------
    BatchID       integer   # references a row in the Batch table
    EntryId       integer   # unique file ID
    Entry         longblob  # '6' record
    

    这应该让你开始。祝你好运。

    你已将此标记为
    家庭作业
    。你能提供任务的更多细节(你正试图解决的问题)以及你现在有哪些代码不起作用。我们不能指望为您做家庭作业。@Chris:首先,我只想知道如何将多个数据插入数据库中的指定列中。为什么您不结合参数化查询逐行分析文件?您可以设置列的值。@Bobby:如果我愿意,我可以将多个数据插入同一列吗您是否试图将特定类型的多个不同条目关联到一个实体?您只需要(几乎)复制表中的条目,只更改一列,或者将表分解为多个表。这主意不错,但我想知道替代方法