Textbox.text参数未传递到db连接C#应用程序
我正在使用一个windows应用程序,该应用程序有一个登录页面,用户在其中输入其sql连接凭据用户名和密码。然后他们可以将数据从excel表格上传到db。我遇到的问题是,当用户按下run按钮,开始打开文件和读取数据的过程,然后最终将值传递给DB,当它尝试连接到DB时失败,因为他返回null作为用户名和密码。在将这些值传递到db连接部件时,如何使程序记住这些值Textbox.text参数未传递到db连接C#应用程序,c#,sql,database,textbox,C#,Sql,Database,Textbox,我正在使用一个windows应用程序,该应用程序有一个登录页面,用户在其中输入其sql连接凭据用户名和密码。然后他们可以将数据从excel表格上传到db。我遇到的问题是,当用户按下run按钮,开始打开文件和读取数据的过程,然后最终将值传递给DB,当它尝试连接到DB时失败,因为他返回null作为用户名和密码。在将这些值传递到db连接部件时,如何使程序记住这些值 using System; using System.Collections.Generic; using System.Componen
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Globalization;
using System.Data.SqlClient;
namespace NewTestDataReader
{
public partial class DataUploader : Form
{
public DataUploader()
{
InitializeComponent();
}
internal string m_susername;
public string username { get { return this.m_susername; } set { this.m_susername = value; } }
internal string m_spassword;
public string password { get { return this.m_spassword; } set { this.m_spassword = value; } }
private void RunButton_Click(object sender, EventArgs e)
{
Thread oThread = new Thread(new ThreadStart(scan));
oThread.Start();
password = userPasswordInputTextBox.Text;
username = userNameInputTextBox.Text;
}
private void scan()
{
///scans the file and goes to FileReader function in separate TestDataReader.cs file
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Text.RegularExpressions;
using Excel = Microsoft.Office.Interop.Excel;
namespace TestDataReader
{
public class SheetOneDataReader : DataUploader
{
//parameters it reads from the excel sheet
internal string m_sName;
public string Name { get { return m_sName; } set { m_sName = value; } }
internal string m_sAddress;
public string Address{ get { return m_sAddress; } set { m_sAddress = value; } }
public void SaveSheetOneDataToDB()
{
SqlCommand cmd = new SqlCommand("UL_ExcelFirstSheetData");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = this.Name;
cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 50).Value = this.Address;
String connectionString;
SqlConnection cnn;
connectionString = "data source = 10.5.200.300";
connectionString += ";initial catalog = Excel_data" + ";Persist Security Info=True";
**connectionString += ";user id=" + username; //returns null
connectionString += ";password=" + password; //returns null**
cnn = new SqlConnection(connectionString);
try
{
cnn.Open();
}
catch
{}
}
}
public class FileReader
{
public static bool ReadFile(FileInfo oInfo)
{
try
{
//goes to SheetOneDataReader on top
SheetOneDataReader oDataSheetOne = new SheetOneDataReader();
oDataSheetOne.Name = //values from excel sheet
oDataSheetOne.Address = //values from the excel sheet
oDataSheetOne.SaveSheetOneDataToDB();
}
}
}
}
username
和password
属性属于您在SheetOneDataReader
中继承的类DataUploader
。您可以在RunButton\u单击DataUploader
下设置这些属性的值。当您继承该类时,它将使用null重新初始化这两个属性,而不会保留您在其他类中指定的值
而是在SheetOneDataReader
类中为以下属性设置值,这就是您需要它们连接到数据库的地方
password = userPasswordInputTextBox.Text;
username = userNameInputTextBox.Text;
或者您可能不得不求助于其他状态管理方式,如会话
或视图状态
这是什么类型的应用程序?windows/web/mobile?这是我第一次看到这样完全混乱的代码,当您调用RunButton\u Click和调用SaveSheetOneDataToDB时,我们没有看到连接。根据此示例,您没有执行命令,也没有正确处理连接,这段代码是否直接来自您的应用程序?@csensoft这是一个windows应用程序我厌倦了在SheetOneDataReader中添加属性,但当我使用这些行设置值时,它会抱怨有关UserPasswordInputExtBox的值。这就是为什么我试图在DataUploader中设置它。它说“UsernameInputExtBox”名称在当前数据库中不存在context这是因为SheetOneDataReader
不能直接访问表单
控件。SheetOneDataReader
是一个单独的.cs
文件继承DataUploader
?另一种方法是分配会话[“username”]=userNameInputTextBox.Text代码>从您可以访问textbox控件的任何类,并在您需要的其他地方使用它。如果您不想这样做,那么最好构造您的类,以便在它们之间共享成员,因为每个请求都会创建一个新的类实例。我刚刚在DataUploader内部静态字符串m_susername中声明了它;公共静态字符串用户名{get{return m_susername;}set{m_susername=value;}}内部静态字符串m_spassword;公共静态字符串密码{get{return m_spassword;}set{m_spassword=value;}}},我可以通过DataUploader.password调用它来保存SheetOneDataToDB您可以使用静态变量来实现这一点。这些变量将在所有请求之间共享,而与客户端无关。我很怀疑那是你想要的。