是否可以将多个数据保存到一个数据库列

本文关键字:一个 数据库 保存 数据 是否 | 更新日期: 2023-09-27 17:49:15

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

 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);

但这将插入最新的数据库,但我想保存每一行按照我所说的

是否可以将多个数据保存到一个数据库列

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

相反,它看起来像:

  1. 每个文件以'1'记录开始,以'9'记录结束
  2. 每个文件包含零个或多个批次
  3. 每批以'5'记录开始,以'8'记录结束
  4. 每批包含零个或多个条目('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

这应该让你开始。好运。

为什么不使用Stringbuilder并将所需的行附加到该字符串构建器并将它们写入DB而不是使用字符串呢?如果需要的话,分离每一列将很难检索数据。因此,声明一个字符串构建器并将所需的行附加到每一行然后写入DB

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);