C#如何实现数据库连接信息保存在文本中,如何读取该文本信息进行连接数据库的操作。 连接数据库的信息?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何实现数据库连接信息保存在文本中,如何读取该文本信息进行连接数据库的操作。 连接数据库的信息?相关的知识,希望对你有一定的参考价值。

1.数据库连接:在config文件中的形式
<connectionStrings>
<add name="dbConnection" connectionString="Data Source=192.168.1.100;Initial Catalog=NanFangMgr;User ID=sa;PassWord=sa" providerName="System.Data.SqlClient"/>
</connectionStrings>
2.在C#中调用:
System.Configuration.ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString
3.将上述连接串保存到文本文件中
private string FILE_NAME = Application.StartupPath + "\\mytxtFile.txt";

private void WriteFile(string str)

StreamWriter sr;
if (File.Exists(FILE_NAME)) //如果文件存在,则创建File.AppendText对象

sr = File.AppendText(FILE_NAME);

else //如果文件不存在,则创建File.CreateText对象

sr = File.CreateText(FILE_NAME);

sr.WriteLine(str);
sr.Close();


4.从文本文件中去内容
private String ReadTxtFile()

if (File.Exists(FILE_NAME)) //如果文件存在

String[] strs = System.IO.File.ReadAllLines(FILE_NAME);
return strs[strs.Length - 1];

return String.Empty;


5.数据库连接,并操作
5.1 查询
String ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
public DataTable Query(String where)

String sql = String.Format("select * from mytable Where 0", where.ToLower().Replace("update", "").Replace("delete", "").Replace("insert", "").Replace(";", "").Replace("--", "").Replace("exec", ""));
try

SqlDataAdapter da = new SqlDataAdapter(sql, new SqlConnection(ConnectionString));
DataTable dt = new DataTable();
da.Fill(dt);
return dt;

catch

return null;


5.2 新增
public int New(Entities.mytable obj)

String sql = "insert into mytable(pkid,a,b,c) values(@pkid,@a,@b,@c)";
SqlConnection cn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@a", obj.a);
cmd.Parameters.AddWithValue("@b", obj.b);
cmd.Parameters.AddWithValue("@c", obj.c);
cmd.Parameters.AddWithValue("@pkid",
String.Empty.Equals(obj.pkid) ? System.Guid.NewGuid().ToString() : obj.pkid);
try

if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();

catch

return -1;

finally

if (cn.State != ConnectionState.Closed)
cn.Close();


5.3 编辑
public int Update(Entities.mytable obj)

String sql = "Update mytable Set a=@a,b=@b,c=@c Where pkid=@ObjectID";

SqlConnection cn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@a", obj.a);
cmd.Parameters.AddWithValue("@b", obj.b);
cmd.Parameters.AddWithValue("@c", obj.c);
cmd.Parameters.AddWithValue("@pkid", obj.pkid);
try

if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();

catch

return -1;

finally

if (cn.State != ConnectionState.Closed)
cn.Close();


5.4 删除
public int Del(String where)

String sql = String.Format("delete from mytable Where 0", where.ToLower().Replace("update", "").Replace("delete", ""));
SqlConnection cn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
try

if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();

catch

return -1;

finally

if (cn.State != ConnectionState.Closed)
cn.Close();

参考技术A 同学你这一下子提的是三个问题!那么,对于你的问题我的回答如下:
1.将数据库的连接信息保存在文本中。其实很多人的做法是将连接信息保存到一个配置文件中。那么我直接告诉你获取数据库连接的字符串吧,你可以在设置连接服务器中,指定一个数据库,完成之后直接右键连接数据库的属性,这就是你需要的。
2.连接数据库需要用到SqlConnection类,它是SqlClient命名空间中的类。实例化它需要连接数据库的字符串作为参数。SqlConnection connection=new SqlConnection(str);
然后打开连接:connection.Open();
这样之后你就可以直接于数据库进行通信了。

如何更改 C# 文本文件中的未知数字?

【中文标题】如何更改 C# 文本文件中的未知数字?【英文标题】:How to change an unknown number in a text file for C#? 【发布时间】:2018-02-09 17:54:43 【问题描述】:

我正在尝试为我的 Discord 服务器的机器人创建一个“警告系统”,当使用该命令时,它会从文本文件中提取信息,然后对其进行更新。我可以在一定程度上设想我想要一步一步发生的事情,但我对如何提取将从文件中读取的内容作为示例感到困惑:

鲍勃#5368 3 标记#8459 6 辛迪#1254 2

我只想更改名称后面的数字,我不太确定如何基本上找到我正在寻找的用户,然后拉数字并将其设置为“totalWarn”,将其添加( totalWarn =+ warnNum),然后用新号码更新该用户。

注意:“warningFile”是已在此代码块之外定义的文件路径。

public async Task warn(IGuildUser user, int warnNum, [Remainder] string reason)
    
        int totalWarn = 0;
        if (user == null)
            await ReplyAsync("Please include a name");
        if (warnNum <= 0)
            await ReplyAsync("The warning level must increase by 1 or more.");
        if (reason == null)
            await ReplyAsync("Please include a reason.");

        string nickName = user.Username;

        //Check for whether text file exists or not.
        if (!File.Exists(warningFile))
        
            //Create the File
            FileStream fs = File.Create(warningFile);
        

        //Reads all the text in the file and puts it into an array.
        string[] arr = File.ReadAllLines(warningFile);
        for (int i = 0; i < arr.Length; i++)
        
            string line = arr[i];
        



        totalWarn = +warnNum;
        await Context.Channel.SendMessageAsync($"user.Username's warning level has increased by warnNum for reason.\n"
            + $"Your warning level is now totalWarn. Please take this time to review the server rules.");
    

我不是在找人来帮我完成它,只是因为我完全迷失了方向,所以可以帮助自己朝着正确的方向前进,而有关更改文本的信息也不是很有帮助。

【问题讨论】:

user.Username 属性是否只返回名称?您需要拥有整个标识符才能在文件中获取实际用户 那么有什么问题呢?您需要解析“bob#5368 3”字符串的帮助吗? 您可能希望为此使用数据库。使用您的方法,您必须阅读 all 文本文件的行(当您只需要一个时)。然后你必须解析文本行,找到你想要的数字,把那个数字解析成一个int然后添加到那个int,然后重写整个文件。而数据库的工作量要少得多,而且速度要快得多 仅供参考,如果文件不存在,您将收到异常,因为您在创建新文件后没有关闭FileStream fs,然后您尝试在下一个文件中读取该文件线。为了解决这个问题,你可以把它放在using 中,它会自动关闭并处理它:using (File.Create(warningFile))(最好)或者在你创建它之后关闭它:File.Create(warningFile).Close(); 我没想到所有这些 cmets 这么快。 user.Username 提取了他们在 Discord 中的当前昵称,我不太确定如何将标识符更改为字符串。我一定会检查数据库方法。我对此类事情的经验为零,因此我不确定将其合并到不和谐机器人中会有多容易。至于文件关闭,注明。忘记写了。现在固定在我的实际程序上。 【参考方案1】:

以下是如何使用正则表达式解析文件中的一行:

void Main()

    string line = "bob#5368 3";
    GuildUser user = new GuildUser( line );
    user.Warnings++;
    user.ToString().Dump();


public class GuildUser

    public string Name  get; set;
    public int Id  get; set;
    public int Warnings  get; set;
    public GuildUser( string line )
    
        Match match = Regex.Match( line, @"(.+)?#(\d+) (\d+)" );
        if ( !match.Success ) throw new Exception( "Couldn't parse line: " + line );
        Name = match.Groups[1].Value;
        Id = int.Parse( match.Groups[2].Value );
        Warnings = int.Parse( match.Groups[3].Value );

    
    public override string ToString()
    
        return $"Name#Id Warnings";
    

您可以使用 File.ReadAllLines、File.WriteAllLines。

我可能也会使用一些 linq。

我更新为添加“ToString”方法来重写该行。 然后,您可以添加警告并获取调用 ToString() 的新字符串。

【讨论】:

【参考方案2】:

另一种方式:

    public static void stuff()
           
        string name = "bob";
        string firstNumber = "";
        string secondNumber = "";
        int lineIndex = 0;

        List<string> lines = new List<string>(File.ReadAllLines(@"C:\Text.txt"));

        foreach(string line in lines)
        
            if(line.Contains(name))
            
                lineIndex = lines.IndexOf(line);
                string[] parts = line.Split('#');
                name = parts[0];
                firstNumber = parts[1].Split(' ')[0];   
                secondNumber = parts[1].Split(' ')[1];

                firstNumber = (Convert.ToInt32(firstNumber) + 1).ToString();

                /*
                 * instert code here for changing the number you want to change
                */

                lines[lineIndex] = name + "#" + firstNumber + " " + secondNumber;
                File.WriteAllLines(@"C:\Text.txt",lines.ToArray());
                break;
            
                           
    

【讨论】:

以上是关于C#如何实现数据库连接信息保存在文本中,如何读取该文本信息进行连接数据库的操作。 连接数据库的信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin 表单和 C# 将 Html 数据从网站保存到文本文件

从文本文件中读取一行,然后用新文本 C# 替换同一行

C# 如何在文本文件中添加数据而不清除原来的内容?

使用 C# 连接和读取 .MDB 项

如何在 C# 中读取文本文件中的多行? [复制]

如何在 C# 中读取文本文件中的多行? [复制]