0

私の問題は、SQL Server データベースを使用することです。

次のコードを使用して、C# から SQL Server テーブルにデータを正常に格納しました。

 internal static void SaveAutocadFileOnDataBase(string MapCode, byte[] dataElecMap, string dataElecMapName,byte[] dataCivilMap, string dataCivilMapName, byte[] dataArchiMap, string dataArchiMapName,byte[]dataMechaMap,string dataMechaMapName)
        {
            string sqlcommand = string.Concat("INSERT INTO AutoCadFiles VALUES ('", MapCode, "' , ", "cast ('", dataElecMap, "' as varbinary(max)),", " '", dataElecMapName, "' ", " , cast ('", dataCivilMap, "' as varbinary(max)) ,", " '", dataCivilMapName, "' ", " , cast ('", dataArchiMap, "' as varbinary(max)) ,", " '", dataArchiMapName, "' "," , cast ('", dataMechaMap, "' as varbinary(max)) ,", " '", dataMechaMapName, "' ", ")");  ExecuteNonQuery(sqlcommand);
        }

このコードでそれを取得します。

    internal static DataTable RetriveMaps(string MapNumber, string MapType)
    {
        string s = MapType + "Name";
        string SqlCommand = string.Concat("SELECT ", MapType, " , ", s, " FROM AutoCadFiles WHERE MapCode='",MapNumber, "'");
        return GetBinaryFiles(SqlCommand);
    }

    private static DataTable GetBinaryFiles(string SqlCommand)
    {
        SqlConnection SqlConnction = null;
        DataTable dt = new DataTable();
        SqlCommand sqlcom = GetConnection(SqlCommand, ref  SqlConnction);
        SqlDataReader sdldr = sqlcom.ExecuteReader();
        dt.Load(sdldr);
        return dt;
    }

dataTable からファイルを正常に取得し、ファイルシステムに保存しました。しかし、保存されたファイルのボリュームは0バイトです

または、データベースに保存されているファイルよりも 13 バイト少ない。

4

1 に答える 1

0

一度に 1 つの行を取得しているため、次の単純なコードでデータを取得できます。

        string fileName;
        byte[] fileread;

        SqlCommand command;
        SqlConnection connection = MyGetSqlConnection();

        connection.Open();

        command = new SqlCommand("Select dataElecMapName From AutoCadFiles  Where MapCode = @MapNumber", connection);
        command.Parameters.Add("@MapNumber", SqlDbType.Int).Value = MapNumber;
        fileName = (string)command.ExecuteScalar();
        command.Dispose();

        command = new SqlCommand("Select dataElecMap From AutoCadFiles  Where MapCode = @MapNumber", connection);
        command.Parameters.Add("@MapNumber", SqlDbType.Int).Value = MapNumber;

        fileread = (byte[])command.ExecuteScalar();

        string tempPath = MyFunc.GetTempDirectory();

        FileStream fs = new FileStream(tempPath + fileName, FileMode.Create);
        fs.Write(fileread, 0, fileread.Length);

        System.Diagnostics.Process.Start(tempPath + fileName);

        fs.Close();

EDIT このコードを使用してファイルを変換します。

    public static byte[] ConvertFileToBytes(string location, ref string FileName) 
    { 
        FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read);

        BinaryReader reader = new BinaryReader(fs);

        byte[] data = reader.ReadBytes((int)fs.Length);

        fs.Close(); 
        return data; 
    } 
于 2013-02-07T01:16:49.393 に答える