Какой тип данных использовать для этого, чтобы изображение могло быть загружено на SQL Server? - PullRequest
7 голосов
/ 25 февраля 2010

Visual Studio, c #, сервер SQL 2005. Я пытаюсь сопоставить тип данных таблицы .dbml с моим файлом .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, int, notnull)
FileName (nvarchar (100), null)
FileType (nvarchar (100), null)
FileSize (int, null)
FileContent (varbinary (max), null)

 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

{ public int DatabaseId {get; задавать; } public String FileName {get; задавать; } public String FileType {get; задавать; } public int FileSize {get; задавать; } public byte [] FileContent {get; задавать; } public 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;   
    }        
}

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

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

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

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

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();
}
0 голосов
/ 28 февраля 2010

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

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

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

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

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

Eddy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...