在Windows Phone中的SqlCe中插入操作

时间:2013-12-01 05:29:52

标签: windows-phone-7 windows-phone-8 windows-phone sql-server-ce

我正在尝试将一些数据插入到mydatabase中,但会收到类似“无法对'表(Dic)执行创建,更新或删除操作'的错误,因为它没有主键。” 我的数据库名称是“condrokotha_new.sdf”,它有一个名为“dic”的表,其中有2列名为“english”和“bangla”。我在vs 2010中的另一个C#项目中创建了这个数据库。然后我将这个数据库用于我的windowsphone项目。我可以显示数据库中的数据,但是当我尝试插入数据时,我收到错误。

这是我的代码:

public partial class MainPage : PhoneApplicationPage
{
    condrokotha_newContext db = null;


    // Constructor
    public MainPage()
    {
        InitializeComponent();

        db = new condrokotha_newContext(condrokotha_newContext.ConnectionString);
        db.CreateIfNotExists();
        db.LogDebug = true;

    }

 private void fav_Click(object sender, RoutedEventArgs e)
    {
      add_new_words("cintakhela","ami");

    }


private void add_new_words(string e_word,string b_word)
    {
        using (condrokotha_newContext context = new condrokotha_newContext(condrokotha_newContext.ConnectionString))
        {
            Dic d = new Dic();

            d.English = e_word;
            d.Bangla = b_word;

            context.Dics.InsertOnSubmit(d);

            context.SubmitChanges();
        }
    }
  }

我的数据上下文代码如下:

    public static string ConnectionString = "Data Source=isostore:/condrokotha_new.sdf";

    public static string ConnectionStringReadOnly = "Data Source=appdata:/condrokotha_new.sdf;File Mode=Read Only;";

    public static string FileName = "condrokotha_new.sdf";

    public condrokotha_newContext(string connectionString) : base(connectionString)
    {
        OnCreated();
    }

  #region Extensibility Method Definitions
  partial void OnCreated();
  #endregion

    public System.Data.Linq.Table<Dic> Dics
    {
        get
        {
            return this.GetTable<Dic>();
        }
    }
}

[global::System.Data.Linq.Mapping.TableAttribute(Name="dic")]
public partial class Dic
{

    private string _English;

    private string _Bangla;

    public Dic()
    {
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Name="english", Storage="_English", DbType="NVarChar(1000)")]
    public string English
    {
        get
        {
            return this._English;
        }
        set
        {
            if ((this._English != value))
            {
                this._English = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Name="bangla", Storage="_Bangla", DbType="NText", UpdateCheck=UpdateCheck.Never)]
    public string Bangla
    {
        get
        {
            return this._Bangla;
        }
        set
        {
            if ((this._Bangla != value))
            {
                this._Bangla = value;
            }
        }
    }
}

` 如何将我的数据插入我的数据库? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

例如,你有这个

    SampleDataContextDataContext db = new SampleDataContextDataContext();
Employee emp = new Employee() {
      FirstName = "Experts",
      Lastname = "Comment",
      Address = "rs.emenu@gmail.com"
}
db.Employees.InsertOnSubmit(emp);
db.SubmitChanges();

当您尝试插入新行时,上面的代码会给出相同的错误。原因是LINQ没有提供在没有主键的情况下将数据插入表的工具。此时您有两种选择。

1.创建存储过程并从LINQ调用它。

SampleDataContextDataContext db = new SampleDataContextDataContext();
db.InsertEmployeeData("Experts","Comment", "rs.emenu@gmail.com");

这里InsertEmployeeData是一个存储过程,并从代码中调用它。

2.创建一个insert语句并使用LINQ执行。

SampleDataContextDataContext db = new SampleDataContextDataContext();

string insertStatement = "Insert into Employee values('Experts', 'Comment','rs.emenu@gmail.com')";
db.ExecuteQuery<Employee>(insertStatement);

这里insert查询是正常的sql查询,并使用LINQ ExecuteQuery方法执行。