[英]Is it appropriate to use a shell command to download MySQL tables from within a C# program?
我正在编写一个C#程序,该程序需要从REMOTE服务器中的MySQL数据库获取数据。 它将使用的Internet连接非常慢且不可靠,因此我想最小化正在传输的数据。
以下shell命令使MySQL可以将本地表中的数据作为* .txt文件存储在本地计算机中:
mysql.exe -u USERNAME -pPASSWORD -h REMOTE_SERVER_IP DB_NAME -e "SELECT * FROM table1" > C:/folder/file_name.txt
截至目前,我正在编写一个将执行此命令的C#程序。 但是,从Windows命令提示符执行此命令时,出现警告,提示“在命令行界面上使用密码可能不安全”。 我有几个问题:
1-它指的是哪种安全风险?
2-如果从另一个程序中执行此风险,是否仍然存在?
3-你们所有人都会使用相同的方法吗? 与直接使用MySqlConnection并调用SP将所有数据存储在RAM中(然后将其稍后插入本地数据库)相比,这在传输的数据量,速度和RAM使用率方面有何不同? (当然,从理论上讲,我不希望有人尝试过这种特定的比较)
4-以下链接上的代码是否最适合? MySql库(.Net Framework)中是否没有什么可以使它变得更容易?
我也乐于接受有关彻底改变我的方法的建议,以防万一...
编辑:我在3中提到的替代方法使用MySqlDataAdapter类,该类将数据存储在DataSets中。
当您将密码作为CLI参数传递时,如果它们显示在屏幕上,则任何人都可以看到您的密码。 就这么简单。
您会将所有记录都存储到内存中并不是真的。 如果使用MySQL的IDataReader
MySqlDataReader
(即,需要调用MySqlCommand.ExecuteReader
方法)实现,则可以像流一样顺序地从数据库中检索结果,因此,您可以逐一读取结果集中的每个结果并将其存储在使用FileStream
的文件中。
它与在没有掩码(点或*)的任何网站上键入密码的想法几乎相同。 是否要担心这取决于您自己决定。
为什么不使用MySqlConnection
以标准方式(例如,从w / i .Net从w / i .Net连接到Oracle数据库)连接数据库,如此处MySql Connection所示。 然后,一旦这样做,就不必担心密码了,因为这在代码中。 然后,我认为我将以类似的方式处理该问题(逐步获取数据并在本地存储-绕开互联网问题)。
因此,我终于开始正确编码和测试这两种方法(shell命令和IDataReader),结果非常有趣。 每种方法总共对我的4张最重桌子进行了六次测试。 shell命令的方法平均需要1:00.3分钟,而DataReader则需要0:56.17分钟,因此我将继续使用它,因为总体上(并且相当一致)优势是4s。
但是,如果查看每个步骤的故障,C#似乎需要完整的8秒才能连接到数据库(下载表所需的时间为48.3秒,而以前的总数为48.3秒)。 如果您认为shell命令最有可能为正在下载的每个表建立和关闭新连接,那么在我看来,该过程中的某些操作实际上可以更快地连接到远程数据库。 另外,对于其中一个表,shell命令实际上要快2.9秒。 对于其余的表,在shell命令下只有一个慢了8秒以上。
我对将来的任何人的建议是,如果您仅获得一个大表,则使用shell命令。 对于下载多个表, IDataReader
是更有效的选择,可能是因为它仅建立一次连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.