Какой Тип данных использовать для этого так, чтобы изображение могло загрузить на SQL Server?

Visual Studio, c#, сервер SQL 2005. Я "m пытающийся соответствовать .dbml типу данных table моему .cs файлу. Цель состоит в том, чтобы позволить изображению загружаться к базе данных. До сих пор это не работает. Проблема, кажется, связана с типом файла для столбца FileContent. Я попробовал несколько различных изменений, но ни один не работал.

<Column Name="FileName" Type="System.String" DbType="NVarChar(100)" CanBeNull="true" />
<Column Name="FileType" Type="System.String" DbType="NVarChar(100)" CanBeNull="true" />
<Column Name="FileSize" Type="System.int32" DbType="int" CanBeNull="true" />
<Column Name="FileContent" Type="System.Data.Linq.Binary" DbType="varbinary(MAX)" CanBeNull="true" />

Столбцы SQL Server
Applicant_PK (PK, интервал, notnull)
FileName (nvarchar (100), пустой указатель)
FileType (nvarchar (100), пустой указатель)
FileSize (интервал, пустой указатель)
FileContent (varbinary (макс.), пустой указатель)

 void CreatePreApplication()
{
    Pre_Application = new PreApplication();
    Pre_Application.FileName = Path.GetFileName(ctrFile.PostedFile.FileName);
    Pre_Application.FileType = ctrFile.PostedFile.ContentType;
    Pre_Application.FileSize = ctrFile.PostedFile.ContentLength;
    byte[] fileContent = new byte[ctrFile.PostedFile.ContentLength];
    ctrFile.PostedFile.InputStream.Read(fileContent, 0, ctrFile.PostedFile.ContentLength);
    Pre_Application.FileContent = fileContent;     

public class PreApplication

{общедоступные международные DatabaseId {добираются; набор;} общедоступная Строка FileName {добираются; набор;} общедоступная Строка FileType {добираются; набор;} общедоступные международные FileSize {добираются; набор;} общедоступный байт [] FileContent {добираются; набор;} общедоступный PreApplication ()

 {
    PreApplicationsDataContext db =
        new PreApplicationsDataContext(
            "Data Source=THESQLSERVER;Initial Catalog=THECONNECTIONSTRING;Integrated Security=True");
    tblPreApplication preApp = new tblPreApplication();
    preApp.FileName = FileName;
    preApp.FileType = FileType;
    preApp.FileSize = FileSize;
    preApp.FileContent = (byte[])FileContent;
    try

    {
        db.tblPreApplications.InsertOnSubmit(preApp);
        db.SubmitChanges();
        DatabaseId = preApp.Applicant_PK;
        return preApp.Applicant_PK;
    }
    catch
    {
        DatabaseId = 0;
        return 0;   
    }        
}

Спасибо за рассмотрение этого. Я - новичок при программировании, поэтому если Вы задаете мне вопрос, имейте это в виду.

7
задан BIBD 4 March 2010 в 18:16
поделиться

2 ответа

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

ваш класс должен быть определен так

public PreApplication() {
}

public DoInsert {
  PreApplicationsDataContext db =
    new PreApplicationsDataContext("Data Source=THESQLSERVER;Initial Catalog=THECONNECTIONSTRING;Integrated Security=True");
  tblPreApplication preApp = new tblPreApplication();
  preApp.FileName = FileName;
  preApp.FileType = FileType;
  preApp.FileSize = FileSize;
  preApp.FileContent = (byte[])FileContent;
  try {
    db.tblPreApplications.InsertOnSubmit(preApp);
    db.SubmitChanges();
    DatabaseId = preApp.Applicant_PK;
    return preApp.Applicant_PK;
  } catch {
    DatabaseId = 0;
    return 0;   
  }  
}

, а затем ваша функция выполнения

void CreatePreApplication() {
    Pre_Application p = new PreApplication();
    p.FileName = Path.GetFileName(ctrFile.PostedFile.FileName);
    p.FileType = ctrFile.PostedFile.ContentType;
    p.FileSize = ctrFile.PostedFile.ContentLength;
    byte[] fileContent = new byte[ctrFile.PostedFile.ContentLength];
    ctrFile.PostedFile.InputStream.Read(fileContent, 0, ctrFile.PostedFile.ContentLength);
    p.FileContent = fileContent;

    //do the insert after you have assigned all the variables
    p.DoInsert();
}
1
ответ дан 7 December 2019 в 20:37
поделиться

Я бы дважды проверил вашу строку подключения, если вы работаете локально, используйте "."для THESQLSERVER и убедитесь, что Initial Catalog = NameOfDataBase. Если вы не уверены, какой объект имеет значение null, попробуйте пройти через него в отладчике и наведите указатель мыши на переменную db. Убедитесь, что это не null.

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

Наконец, неплохо убедиться, что Steam находится в начале, прежде чем читать вы всегда можете сбросить его как таковой:

// Ensure stream is at 0 index.
if (stream.Position != 0)
{
   stream.Seek(0, SeekOrigin.Begin);
}

Надеюсь, это немного поможет,

Эдди

0
ответ дан 7 December 2019 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: