|
This checks if array itself is null. I think the OP want to know if array contains at least one item that is null.
[ My Blog] "Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn "Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
What about if(Array.IndexOf(arr,null)>-1) ?
[ My Blog] "Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn "Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
His teacher will be impressed!
All the best,
Martin
|
|
|
|
|
foreach(string s in arr)
{
if(s==null)
{
return true;
}
}
Ahsan Ullah
Senior Software Engineer
|
|
|
|
|
assign null on the definition of your array and then you can check if(arr==null) otherwise compilor will gave error
|
|
|
|
|
Hi,
From C# I'm using an OdbcCommandBuilder to generate DELETE, INSERT and UPDATE commands for updating a MySQL table and I receive the following error:
"Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information."
I thought this was because the table had no primary key. But I checked and it does. Does anyone know another reason why I get this error?
Thanks
|
|
|
|
|
I think that this error is because you are passing a delete command for select statement. Can you please post your code for me to look into?
|
|
|
|
|
Nope, I'm pretty sure it's not that. But here's the code anyway.
OdbcDataAdapter adapter = new OdbcDataAdapter();
OdbcCommand comm = new OdbcCommand("SELECT * FROM `" + tableName + "`", connection);
adapter.SelectCommand = comm;
OdbcCommandBuilder builder = new OdbcCommandBuilder(adapter);
adapter.DeleteCommand = builder.GetDeleteCommand();
adapter.InsertCommand = builder.GetInsertCommand();
adapter.UpdateCommand = builder.GetUpdateCommand();
I suppose the insert and update commands don't work either but I get the exception when trying to generate the delete command.
|
|
|
|
|
adapter.DeleteCommand = builder.GetDeleteCommand();
adapter.InsertCommand = builder.GetInsertCommand();
adapter.UpdateCommand = builder.GetUpdateCommand();
In the above lines of code you are trying to get the delete and update commands, but you have not assigned them any where. You have only assigned select command by using
adapter.SelectCommand = comm;
I hope it helps sort out your problem
Ahsan Ullah
Senior Software Engineer
|
|
|
|
|
The Get{Delete,Insert,Update}Command() methods analyze the select command of the data adapter, and generate OdbcCommand objects according to the data returned by the select command. I've checked their CommandText properties during Debug and they seem ok. If I didn't assign them, the error would be something like "use of unassigned command" or another message, but not the message that I get. If you meant something else by assigning the commands, please give me an example.
The problem is not with the code but with the database. I know this because it works on one database but it fails on another database with exactly the same structure but from another computer. Could it be the MySql version?
Adrian
Junior Developer
|
|
|
|
|
do a thing comment out the update and delete options and test if select is working alone?
If so then the second thing you could check is that you are passing primary key for update and delete commands.
Ahsan Ullah
Senior Software Engineer
|
|
|
|
|
I tried not calling GetDeleteCommand(), GetInsertCommand() and GetUpdateCommand() some time ago and it didn't work.
How do I check if I'm passing primary key? Should I adapter.Fill() a table and check if there is a primary key? I can do that.
I can generate the commands manually too (but I'd like to avoid that).
I'm just trying to understand why the same code works just fine on one computer, but it doesn't on another computer with the same operating system and the same database structure.
Would you happen to know if on older versions of MySql, the "select * from <table_name>" command doesn't return key column information even if there are keys in the table?
|
|
|
|
|
Hi,
i have a problem with the Currencymanager.
When i assign the Currencymanager.CurrentChanged event (even when the function has no code) i cannot use Currencymanager.addnew . The position in the datagrid remains on another record for editing.
When not assigning the Currencymanager.CurrentChanged event then i can use Currencymanager.addnew and the position in the datagrid is on the new record for inserting.
Anyone any idea why this happens and how i can remain on the correct position for editing even when Currencymanager.CurrentChanged is assigned?
i need this event to know when the position of the cursor has been changed.
thx
Kurt
|
|
|
|
|
Evenin!
I was wondering if it was possible to extract data from a Regex object, such as length boundaries, or possibly generate an example string that will match.
Lets look at some fictual example:
var reg = new Regex("[a-z0-9]{5}");
<br />
var helper = new SomeRegexHelperClass(reg);<br />
var str = helper.GenerateExample();
var maxLen = helper.GetMaxLength();
var minLen = helper.GetMinLength();
So the question is:
Is there anything out there already, that will help me do this?
I'd need either the min/max Length, or an example string, because I have the user enter a Regular Expression which will later be used for validation. But some other stuff requires knowledge of the length of allowed input aswell.
Preferably, I would like to avoid implementing a (rather) complete Regular Expression Parser myself if it was possibly in any other way. I am also open to other suggestions on how to get Infos from the Regex that are not mentioned above, but will lead in the right way.
Thanks in advance.
Greetings, BhaaL
|
|
|
|
|
Sounds like you are doing some kind of validator.
I suggest you create a class to hold the info such as maxlength, char classes, etc, and use that to generate a Regex. Then simply inherit from that class to specialize the behavior.
|
|
|
|
|
We used to have that hardcoded before, but now the User is enabled to enter a RegExp themselves for customization.
Where I previously had the Length, allowed chars and such, I now have the RegExp and need to get at least the Length (validation for allowed chars is now done with the RegExp right away).
I want to keep it simple for the user, so just enter a RegExp and dont think of the rest; I dont want them having to enter a RegExp, in addition to that the Length of the RegExp field (User-thoughts: "Why do I have to enter that twice?"), Conditionals whether it allows only Lower/Upper Case chars or both (User-thoughts: "The RegExp tells you anyways, only capiutal letters?").
User Expierience is an important part of Software design; getting the user to enter 3 or more "redundant" informations is rather annoying.
On the other hand, providing an Editor that lets them piece together Conditions like we had them before (CapitalLetters(starting at 0, length 1), Numbers(1, 2), Dot(3, 1), Numbers(4, 2) for "[A-Z][0-9]{2}\.[0-9]{2}") would probably confuse the user aswell (think of how complex the WinForm would be to allow that, when the user is required to enter 6-12 of those expressions in total).
Thanks for your reply tho.
Greetings, BhaaL
|
|
|
|
|
Hi,
I Think this is odd requirement and that's why you need to Parse the regular Expression. This is the best way.
Best Regards,
Chetan Patel
|
|
|
|
|
My code below gets files from a list box and Zip those files into one Zip file.
My propble is: This works perfectly when i log on to the server and do this operation on the sever itself.(it is an Intranet).
But when i do this on my local machine which is on the same network as the server, it only creates the Zip file but its empty.
Can someone please help.
//Zip
txtsave.Text = "c:\\TempUpload";
System.IO.Directory.CreateDirectory(txtsave.Text);
if(ListBox1.Items.Count < 1)
{
listerror.Text = "Please add Files to the list Box and Press Confirm";
return;
}
if (txtsave.Text == string.Empty)
{
listerror.Text = "save folder not selected";
return;
}
string[] sTemp = txtsave.Text.Split('\\');
string sZipFileName = sTemp[sTemp.Length - 1].ToString();
FileInfo fi = new FileInfo(txtsave.Text + "\\" + sZipFileName + ".zip");
if(!System.IO.Directory.Exists(txtsave.Text + "\\TempZipFile\\"))
{
System.IO.Directory.CreateDirectory(txtsave.Text + "\\TempZipFile\\" + ".zip");
}
string sTargetFolderPath = (txtsave.Text + "\\TempZipFile\\");
for (int i =0; i< ListBox1.Items.Count;i++)
{
string filepath = ListBox1.Items[i].ToString();
FileInfo fi2 = new FileInfo(filepath);
if(fi2.Exists)
{
try
{
fi2.CopyTo(sTargetFolderPath + fi2.Name, true);
}
catch
{
System.IO.Directory.Delete(sTargetFolderPath);
listerror.Text = "Error on Files";
return;
}
}
}
try
{
string[] filenames = Directory.GetFiles(sTargetFolderPath);
using (ZipOutputStream s = new ZipOutputStream(File.Create(txtsave.Text + "\\" + sZipFileName + ".zip")))
{
s.SetLevel(9);
byte[] buffer = new byte[4096];
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceByte;
do
{
sourceByte = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceByte);
} while(sourceByte > 0); }
}
s.Finish();
s.Close();
}
System.IO.Directory.Delete(txtsave.Text + "\\TempZipFile\\", true);
}
catch(Exception ex)
{
listerror.Text = ex.Message.ToString();
}
|
|
|
|
|
Are you connecting to the server from your local machine ? Is this in ASP.NET ? Seems to me like you wrote code expecting it to run locally, but it runs on the server.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
hi,
I am doing a program with c# and mysql database.
the task is actually taking 2 dates out from the mysql database and compare the 2 dates. if it is more than x days den the file will be deleted.
the following is the program that i have done but i am stuck at the logic that is compare the 2 days if more than x days delete the file.
after that i'll run in the schedule task so that it will run automatically at certain time.
here is my code.
string ConnectionString = "server=localhost;user id=name;password;persist security info=True;database=name of database;";<br />
using (MySqlConnection conn = new MySqlConnection(ConnectionString))<br />
{<br />
MySqlCommand cmd = new MySqlCommand();<br />
conn.Open();<br />
if (conn.State == ConnectionState.Open)<br />
{<br />
<br />
<br />
cmd.Connection = conn;<br />
cmd.CommandText = "select history ,lastclrhistorydate from table;";<br />
cmd.CommandType = CommandType.Text;<br />
MySqlDataReader reader;<br />
reader = cmd.ExecuteReader();<br />
if ((reader != null))<br />
{<br />
DataTable dt = new DataTable();<br />
dt.Load(reader);<br />
<br />
if (dt.Rows.Count == 1)<br />
{<br />
int history = int.Parse(dt.Columns[0].ToString());<br />
<br />
string lastclrhistory =dt.Columns[1].ToString();<br />
DateTime currentdate = DateTime.Now;<br />
<br />
<br />
if ((currentdate - lastclrhistory) == history)<br />
{<br />
}<br />
|
|
|
|
|
You can't compare two objects of differnt types. You need to grab the date, as a date, or use DateTime.TryParse to convert it.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
but in the database it is already in date
|
|
|
|
|
That doesn't matter because you've now converted it to a String, just because the string contains a DT format doesn't mean it will be interpreted that way, you must tell it that its a DateTime.
He who makes a beast out of himself gets rid of the pain of being a man
|
|
|
|
|
Did you come from VB, or do you just not know much about programming yet ? you should buy a book on C# and work through it, you're obviously missing some key concepts.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
hi,
I am doing a program with c# and mysql database.
the task is actually taking 2 dates out from the mysql database and compare the 2 dates. if it is more than x days den the file will be deleted.
the following is the program that i have done but i am stuck at the logic that is compare the 2 days if more than x days delete the file.
after that i'll run in the schedule task so that it will run automatically at certain time.
here is my code.
string ConnectionString = "server=localhost;user id=name;password;persist security info=True;database=name of database;";
using (MySqlConnection conn = new MySqlConnection(ConnectionString))
{
MySqlCommand cmd = new MySqlCommand();
conn.Open();
if (conn.State == ConnectionState.Open)
{
cmd.Connection = conn;
cmd.CommandText = "select history ,lastclrhistorydate from table;";
cmd.CommandType = CommandType.Text;
MySqlDataReader reader;
reader = cmd.ExecuteReader();
if ((reader != null))
{
DataTable dt = new DataTable();
dt.Load(reader);
if (dt.Rows.Count == 1)
{
int history = int.Parse(dt.Columns[0].ToString());
string lastclrhistory =dt.Columns[1].ToString();
DateTime currentdate = DateTime.Now;
if ((currentdate - lastclrhistory) == history)
{
//(File.delete(file)
}
|
|
|
|