【问题标题】:Saving to DATABASE MVC pattern保存到数据库 MVC 模式
【发布时间】:2014-05-18 00:42:45
【问题描述】:

我对编程还很陌生,所以请多多包涵。 我在整个项目的不同类中编写了以下代码,我想知道为什么我的输入没有存储在我的数据库中。我真的希望有人能帮助我,因为我这几天一直在为这个问题苦苦挣扎,寻找网络最黑暗的角落。

首先我应该告诉你,我的应用程序也在使用 WCF - 因此这些方法应该通过 WCFService 调用到客户端。 任何帮助将不胜感激!

PS:如果有帮助,这里是我的解决方案概述的屏幕截图:http://imgur.com/JV9Xl3K

客户代码:

  using Client.WCFServiceRef;  //My wcf Service reference

namespace Client
{
    public partial class MainWindow : Window
    {
        private WCFServiceClient Client;
        public MainWindow()
        {
            InitializeComponent();
            Client = new WCFServiceClient();
        }
        public string getMovieName()
        {
            string movieName = txtName.Text;
            return movieName;
        }
        public string getMovieLength()
        {
            string movieLength = txtLength.Text;
            return movieLength;
        }
        public string getMovieDesc()
        {
            string movieDesc = txtDescription.Text;
            return movieDesc;
        }
        private void btnMovies_Click(object sender, RoutedEventArgs e)
        {
            Client.addMovie(getMovieName(), getMovieLength(), getMovieDesc());
        }
    }
}

我的 MovieController 代码:

using Server.DB;

namespace Server.Control
{
    class MovieCtr
    {
        public void addMovie(string movieName, string movieLength, string movieDesc)
        {
            DBMovie conObj = new DBMovie();
            conObj.addMovie(movieName, movieLength, movieDesc);
        }
    }
}

我的 DBMovie 类

namespace Server.DB
{
    public class DBMovie
    {
        DBConnection dbCon = new DBConnection();
        public void addMovie(string movieName, string movieLength, string movieDesc)  
        {
            dbCon.openConnection();
            SqlCommand com = new SqlCommand();
            string query = "INSERT into movies (Name, Runtime, Description) VALUES  ('" + movieName + "','" + movieLength + "','" + movieDesc + "');"; 
            com.CommandText = query;


        }
    }
}

最后是我的 dbconnection 类

namespace Server.DB
{
    public class DBConnection
    {
        SqlConnection sc = new SqlConnection();
        public void openConnection()
        {
            try
            {
                sc.ConnectionString = ("Data Source=balder.ucn.dk;Initial Catalog=dmaa0213_6;User ID=dmaa0213_6;password=XXXXXX");
                sc.Open();
            }  //endTry
            catch (SqlException ex)
            {
                Console.WriteLine("Could not open connection to database");
                Console.WriteLine(ex);
            }
        }
        public void closeConnection()
        {
            sc.Close();
        }
    }
}

【问题讨论】:

    标签: c# asp.net-mvc wcf database-connection layered


    【解决方案1】:

    您需要在 SqlCommand 对象上调用 ExecuteNonQuery。

    string query = "INSERT into movies (Name, Runtime, Description) VALUES  ('" + movieName + "','"    + movieLength + "','" + movieDesc + "');"; 
    com.CommandText = query;
    com.ExecuteNonQuery();
    

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

    还有一件事,您需要将您的连接与命令对象相关联。上面网页中的示例将 SqlConnection 对象传递到 SqlCommand 构造函数中。您需要重写代码才能使其正常工作。

    【讨论】:

    • 这似乎确实做了一些事情,但现在导致单击按钮时应用程序崩溃。 (我猜这比以前按钮似乎没有多大作用的地方要好。
    • 问题是,如前所述,我真的是编程新手,不太清楚你的意思。
    • 例如,查看这篇文章。确保正确使用 using 语句很重要。它将确保 SQL 连接在完成时被正确处理。 (hanselman.com/blog/…)
    • 问题是我不完全理解 USING 在这种情况下的作用。我只知道在开课时使用它
    • 如果对象实现了IDisposable接口,则需要调用Dispose方法释放非托管资源。 USING 关键字确保 Dispose 方法在超出范围时被调用。这是使用 try/catch/finally 的捷径。 (stackoverflow.com/questions/5563886/…) SqlConnection 和 SqlCommand 都实现了 IDisposable 接口。
    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多