输出未写入文本框c#

时间:2015-12-04 14:20:21

标签: c# .net sql-server

我是.net中的新编程。对于第一个项目,我想将数据写入sql server数据库。这是一个非常基本的程序,有一个表单,一些用于输入的文本框和一个用于输出的文本框。该计划的目的是跟踪我的培训。我还有一个输出文本框,问题是该文本框中没有任何内容(“test”除外)。我想这是一个简单的问题,但我无法弄明白。

(正如我所说的,我是.net编程的新手,所以如果你们中的任何人能够提供最佳实践编程的技巧,也会受到赞赏。)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Write_to_database
{
    public partial class WriteToDatabase : Form
    {
        public WriteToDatabase()
        {
            InitializeComponent();
        }

        private void bWrite_Click(object sender, EventArgs e)
        {
            SqlServer sql = new SqlServer();
            WriteToOutput("test");
            sql.OpenSqlConnection();
            sql.WriteToTraining("20151231","10",10.0,5,5);
            sql.CloseSqlConnection();

        }


        public string WriteToOutput(string output)
        {
            this.tOutput.Text += output + "\r\n";
            return this.tOutput.Text.ToString();
        }




    }

    public class SqlServer : WriteToDatabase
    {
        SqlConnection con = new SqlConnection("Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;");
        public void OpenSqlConnection()
        {
            try
            {
                con.Open();
                WriteToOutput("Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " successful.");
            }
            catch
            {
                WriteToOutput("Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " failed.");
            }
        }

        public void CloseSqlConnection()
        {
            try
            {
                con.Close();
                WriteToOutput("Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " successfully closed");
            }
            catch
            {
                WriteToOutput("Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " not closed.");
            }
        }

        public void WriteToTraining(string date, string lift, double weight, int reps, int week)
        {
            try
            {
                using (SqlCommand command = new SqlCommand("INSERT INTO LIFT_HISTORY VALUES(@date,@lift,@weight,@reps,@week)", con))
                {
                    command.Parameters.Add(new SqlParameter("weight", weight.ToString()));
                    command.Parameters.Add(new SqlParameter("date", date.ToString()));
                    command.Parameters.Add(new SqlParameter("week", week.ToString()));
                    command.Parameters.Add(new SqlParameter("reps", date.ToString()));
                    command.Parameters.Add(new SqlParameter("lift", date.ToString()));
                    command.ExecuteNonQuery();
                }
                WriteToOutput("Data successfully written to database.");

            }
            catch
            {
                WriteToOutput("Data not written to database.");
            }
        }

    }
}

3 个答案:

答案 0 :(得分:1)

您的SqlServer类不应继承WriteToDatabase类,因为WriteToDatabase类继承Form类。您的代码中实际发生的是您在创建SqlServer类时创建新表单,并且该表单上的文本框将随值更新。如果在创建SqlServer类的新实例后调用方法sql.Show(),则可以看到这一点。

以下代码将更新WriteToDatabase表单上的值:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Write_to_database
{
    public partial class WriteToDatabase : Form
    {
        public WriteToDatabase()
        {
            InitializeComponent();
        }
    private void bWrite_Click(object sender, EventArgs e)
    {
        SqlServer sql = new SqlServer();
        WriteToOutput("test");
        WriteToOutput(sql.OpenSqlConnection());
        WriteToOutput(sql.WriteToTraining("20151231", "10", 10.0, 5, 5));
        WriteToOutput(sql.CloseSqlConnection());

    }

    public void WriteToOutput(string output)
    {
        this.tOutput.Text += output + "\r\n";
    }
}

public class SqlServer
{
    SqlConnection con = new SqlConnection("Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;");
    public string OpenSqlConnection()
    {
        try
        {
            con.Open();
            return "Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " successful.";
        }
        catch
        {
             return "Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " failed.";
        }
    }

    public string CloseSqlConnection()
    {
        try
        {
            con.Close();
            return "Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " successfully closed";
        }
        catch
        {
            return "Connection to: " + "'Data Source=WINSERVER;Initial Catalog=TRAINING;Integrated Security=SSPI;'" + " not closed.";
        }
    }

    public string WriteToTraining(string date, string lift, double weight, int reps, int week)
    {
        try
        {
            using (SqlCommand command = new SqlCommand("INSERT INTO LIFT_HISTORY VALUES(@date,@lift,@weight,@reps,@week)", con))
            {
                command.Parameters.Add(new SqlParameter("weight", weight.ToString()));
                command.Parameters.Add(new SqlParameter("date", date.ToString()));
                command.Parameters.Add(new SqlParameter("week", week.ToString()));
                command.Parameters.Add(new SqlParameter("reps", date.ToString()));
                command.Parameters.Add(new SqlParameter("lift", date.ToString()));
                command.ExecuteNonQuery();
            }
            return "Data successfully written to database.";

        }
        catch
        {
            return "Data not written to database.";
        }
    }

}

}

答案 1 :(得分:0)

由于您尝试向TextBox添加多行,因此应将TextBox的{​​{3}}属性设置为true

我建议

答案 2 :(得分:-1)

这更简单地写为:



 public void WriteToOutput(string output)
        {
            this.tOutput.Text += output + "\r\n";
        }




当输出字符串输出到文本框时,没有理由返回字符串。还要确保在客户端为多行启用了文本框。 另外,我建议在文本框的名称前面加上" txtOutput"的性质。因此,当您的代码库增长时,您不会混淆自己或任何在代码中查找特定控件/对象的人。

另外,我建议丢弃sqlwriter,而是获取实体框架的版本。实体框架和其他对象关系映射器是工业中实际使用的,因为sql-select语句的打开和关闭变得太繁琐而无法管理。

Plus实体框架如果您正在使用像visual studio这样的智能环境,那么在调试自己的代码时需要一目了然的错误堆栈跟踪。

Plus学习实体框架让您了解linq。几年前,当我开始使用.net编码时,每个新手都应该向这个方向推,我知道我希望自己就是这样。